linux 进程通信 管道,linux下有名管道进程通信

2023-11-09 05:30

本文主要是介绍linux 进程通信 管道,linux下有名管道进程通信,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、任务

1、学习mkfifo等函数;

2、了解有名管道的特点、阻塞打开与非阻塞打开等;

3、编写一个关于有名管道进程通信的程序,并运行。

二、相关概念

1、相关函数

创建有名管道的函数是mkfifo,函数原型是:

int mkfifo (const char *__path, __mode_t __mode)

功能:创建新的带命名路径的FIFO

参数:path — 命名管道路径

mode — 模式权限

返回值:成功返回0,失败返回-1;

2、有名管道的特点

a)、使不同进程之间完成通信。

通过mkfifo创建FIFO文件建立有名管道,

使得不同进程可以通过像访问文件的方式一样来访问有名管道,

fifo文件特点:先进先出:即写文件从有名管道数据尾端写入,数据读取从有名管道的开始处读取。

b)、有名管道内数据不支持如lseek()文件定位操作。

3、阻塞打开与非阻塞打开

对于读进程:

•若该管道是阻塞打开,且当前FIFO内没有数据,则对读进程而言将一直阻塞到有数据写入;

•若该管道是非阻塞打开,则不论FIFO内是否有数据,读进程都会立即执行读操作。即如果FIFO内没有数据,则读函数将立刻返回0、

对于写进程:

•若该管道是阻塞打开,则写操作将一直阻塞到数据可以被写入;

•若该管道是非阻塞打开而不能写入全部数据,则读操作进行部分写入或者调用失败。

三、实验代码及运行结果

1、代码

分别输入形成三个文件 mkfifo.c、client.c、service.c,代码如下:

/*mkfifo.c*/

#include"stdio.h"

#include"unistd.h"

int main()

{

int ret;

ret=mkfifo("./a.c",0777);

if(ret<0)

{

printf("creat fifo a.c failure\n");

return -1;

}

printf("creat mkfifo.c sucess\n");

return 0;

}

/*service.c*/

#include"unistd.h"

#include"fcntl.h"

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

int main()

{

int fd;

char rdbuf[128]={0};

fd=open("./a.c",O_RDONLY);

if(fd<0)

{

printf("open fifo a.c failure\n");

return -1;

}

while(1)

{

read(fd,rdbuf,128);

printf("recv from fifo data:%s",rdbuf);

if(!strcmp(rdbuf,"quit\n"))

break;

memset(rdbuf,0,128);

}

sleep(1);

close(fd);

return 0;

}

/*client.c*/

#include"unistd.h"

#include"fcntl.h"

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

int main()

{

int fd;

char wrbuf[128];

fd=open("./a.c",O_WRONLY);

if(fd<0)

{

printf("open fifo a.c failure\n");

return -1;

}

while(1)

{

memset(wrbuf,0,sizeof(wrbuf));

fgets(wrbuf,128,stdin);

write(fd,wrbuf,strlen(wrbuf));

if(!strcmp(wrbuf,"quit\n"))

{

break;

}

}

sleep(1);

close(fd);

return 0;

}

2、编译运行

1)、生成可执行文件

终端输入:

gcc mkfifo.c -o mkfifo

gcc service.c -o service

gcc client.c -o client

2)、运行

先运行mkfifo,终端输入:./mkfifo

打开两个终端分别运行 service、client

终端分别输入 :  ./service       ./client

即可实现通信!

41b97a2ac7c9d35565329ca6df2c03f6.png

Linux下简单的socket通信实例

Linux下简单的socket通信实例 If you spend too much time thinking about a thing, you’ll never get it done. —Br ...

Linux下查看某个进程打开的文件数-losf工具常用参数介绍

Linux下查看某个进程打开的文件数-losf工具常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在linux操作系统中,一切皆文件.通过文件不仅仅可以访问常规数据,还 ...

Linux下的管道命令有这些:

Linux下的管道命令有这些: 选取命令:cat grep 排序命令:sort wc uniq 双向重定向:tee 字符转换命令: tr, col, join, paste, expand 切割命令: ...

windows和linux下关闭Tomcat进程

windows和linux下解决Tomcat进程 windows下启动Tomcat报错,8080端口号被占用,报错信息如下 两种解决方法,一种是关闭了这个端口号,另外一种是修改Tomcat下的serv ...

linux下的qt串口通信

1.linux下的qt串口通信跟windows唯一的差别就是端口号的名字,windows下面是COM,而linux是ttyUSB0的路径 2.一般情况下linux插上USB转串口线就可以在/dev/目 ...

Linux 下smi&sol;mdio总线通信

Linux 下smi/mdio总线通信 韩大卫@吉林师范大学 下面代码描述了在用户层访问smi/mdio总线, 读写phy芯片寄存器的通用代码.Linux内核2.6以上通用. 将下面代码编译后,将可执 ...

Linux下分析某个进程CPU占用率高的原因

Linux下分析某个进程CPU占用率高的原因 通过top命令找出消耗资源高的线程id,利用strace命令查看该线程所有系统调用  1.top 查到占用cpu高的进程pid 2.查看该pid的线程 ...

解决linux下tomcat停止进程任存在问题

解决linux下tomcat停止进程任存在问题 在Linux下(之所以强调linux下,是因为在windows下正常),执行tomcat ./shutdown.sh 后,虽然tomcat服务不能正常访 ...

windows和linux下杀死Tomcat进程,解决端口占用

windows和linux下解决Tomcat进程 windows下启动Tomcat报错,8080端口号被占用,报错信息如下 两种解决方法,一种是关闭了这个端口号,另外一种是修改Tomcat下的serv ...

随机推荐

Android之ListView性能优化——一行代码绑定数据——万能适配器

如下图,加入现在有一个这样的需求图,你会怎么做?作为一个初学者,之前我都是直接用SimpleAdapter结合一个Item的布局来实现的,感觉这样实现起来很方便(基本上一行代码就可以实现),而且也没有 ...

Redis&lowbar;redis分布式锁-SETNX

因业务需要使用了redis的SETNX来实现分布式锁. 描述:Redis有一系列的命令,特点是以NX结尾,NX是Not eXists的缩写,如SETNX命令就应该理解为:SET if Not eXis ...

javascript练习-私有状态

在经典的面向对象编程中,经常需要将对象的某个状态封装或隐藏在对象内,只有通过对象的方法才能访问这些状态,对外只暴露一些重要的状态可以直接编写.这是就需要私有状态. function Range(fro ...

01day2

小明搬家 模拟 [问题描述] 小明要搬家了,大家都来帮忙. 小明现在住在第N楼,总共K个人要把X个大箱子搬上N楼. 最开始X个箱子都在1楼,但是经过一段混乱的搬运已经乱掉了.最后大家发现这样混乱地搬运 ...

Nopcommerce 3&period;7 增加了Redis 作为缓存啦

Nopcommerce 3.7  版增加了Redis 缓存,相比之前内存缓存, 感觉使用了Redis 作为缓存,明显加快了Web页面响应速度! 废话少说 拉代码: 1 git clone https: ...

Django之URL路由系统

一 URL配置 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表.你就是以这 ...

C&plus;&plus;基础知识--DAY1

1. C语言是面向过程的语言,C++是面向对象的语言,相对于C语言来说,C++语法规则更为严格,其存在类型增强的问题. 类型增强,顾名思义就是C++相对于C语言来说有更加严格的类型检查,很多C语言的语 ...

first one

我说一句话你就知道我是干什么的 hello world

weakSelf 运用 strongSelf来解决block的循环引用

SDWebImage 中有一段源码: #if SD_UIKIT Class UIApplicationClass = NSClassFromString(@"UIApplication&qu ...

Ansible7:Playbook常用模块

目录 template set_fact pause wait_for assemble add_host group_by debug fail playbook的模块与在ansible命令行下使用 ...

这篇关于linux 进程通信 管道,linux下有名管道进程通信的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/374219

相关文章

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

[Linux]:进程(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 进程终止 1.1 进程退出的场景 进程退出只有以下三种情况: 代码运行完毕,结果正确。代码运行完毕,结果不正确。代码异常终止(进程崩溃)。 1.2 进程退出码 在编程中,我们通常认为main函数是代码的入口,但实际上它只是用户级

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2