Linux IPC Pipe

mkfifo()//创建有名管道(fifo special file),创建完了就像普通文件一样open(),再读写,成功返回0,失败返回-1设errno。vs$man 3 mkfifo#include #include int mkfifo(const char *pathname, mode_t mode);pathname:the fifo special file's name
mode :the fifo's permissions.
//创建fifo管道文件int res=mkfifo(“./a.fifo”,0664);if(-1==res) perror(mkfifo),exit(-1);res=open(“./a.fifo”,o_rdonly);if(-1==res) perror(“open”),exit(-1);pipe()//创建无名管道,相当于直接把open()返回的fd直接放到形参中,而不需额外的变量接收管道文件的描述符,用于父子进程间通过管道进行ipc通信,,成功返回0,失败返回-1设errno#include int pipe(int pipefd[2]); //代码自注释,表示它需要的参数是一个有两个元素的数组,如果虽然作为形参,实质上和int* pipefd没有区别pipefd :return two fds referring to the ends of the pipe.
pipefd[0] :read end,读端pipefd[1] :write end,读端.fork()创建的child也会文件描述符总表也会复制一份so,对于child, 应该先关闭读端, 再写,对于parent,应该先关闭写端, 再读
//使用pipe()实现父子进程的通信#include#include#include#include#includeint main(){ //1. 创建无名管道 int pipefd[2]; int res=pipe(pipefd); if(-1==res) perror(pipe),exit(-1); //2. 创建子进程 pid_t pid=fork(); if(-1==pid) perror(fork),exit(-1); //3. 子进程开始启动,写入1~100; if(0==pid){ close(pipefd[0]); int i=0; for(i=1;i<=100;i++){ write(pipefd[1],&i,sizeof(int)); } close(pipefd[1]);//关闭写端 exit(0); } //4. 父进程开始启动,读取管道中的数据 close(pipefd[1]); int i=0; for(i=1;i<=100;i++){ int x=0; read(pipefd[0],&x,sizeof(int)); printf(%d ,x); } printf(\n); close(pipefd[0]); return 0;}

CAN总线标准接口与布线规范
CMMB TD-SCDMA手机低成本解决方案面世
华为召开全屋智能及全场景新品春季发布会
韩国金融监管机构将为国内的数字货币交易所引入反洗钱规定
排序算法之归并排序讲解
Linux IPC Pipe
高工年会演讲回顾:超级算力,赋能整车中央计算
索尼新机惊艳设计配合VR而生 5.9寸+2K屏+6G
can总线是单线还是双线 can总线通讯最少需要几根线
国内形成华为与小米上演对决,百度和阿里抢夺AI落地
探究太赫兹发展史以及特性与应用
N5242A网络分析仪介绍
用可控硅制作的一种触摸开关,Touch switch
世界首条高温超导高速磁浮样车下线启用
什么是Mailto
亚马逊、小米、联想各路大咖为何都跨界做智能家居?
人工智能时代!未来一二十年,每3个月将消失6%的工作
高空作业车用的电控系统解决方案
复享光学显微角分辨光谱仪完成国家科技部科技成果入库
汽车暖通空调系统:阀门控制