陕西省建设厅管理中心网站,企业网站源码下载站长之家,重庆市建设安全信息网,产品展示网站模板源码linux环境下,各进程相互独立#xff0c;如果想要交换两个进程之间的数据#xff0c;需要通过内核#xff0c;在内存中提供一个缓存区#xff0c;一个进程往缓存区中写数据#xff0c;一个往缓存区读数据#xff0c;内核提供的这种机制称为进程间通信#xff08;IPC… linux环境下,各进程相互独立如果想要交换两个进程之间的数据需要通过内核在内存中提供一个缓存区一个进程往缓存区中写数据一个往缓存区读数据内核提供的这种机制称为进程间通信IPC,常见的进程通信有四种管道最简单信号开销最小共享映射区无血缘关系本地套接字最稳定。 1管道 管道的特点本质是一个伪文件内核缓冲区两个文件描述符引用读端和写端写端写入读端读出。 管道的原理及实质内核使用环形队列机制借助内核缓冲区实现。 管道的缺点1数据自己读不能自己写2数据被读走不在管道存在3半双工通信数据读写不能同时数据流向唯一4有血缘关系的进程间 创建管道pipe函数 函数头文件及原型函数参数为输入参数 成功调用返回0 失败返回-1 函数调用成功返回r/w两个文件无需open,但是需要手动close,其中pipefd[0] --r,pipefd[1]--w,可根据读写要求关闭pipe的一端来实现进程通信 管道中的读写情况有四种 1读管道时 1.管道有数据read返回实际读到的字节数 2.管道中无数据 1管道写端全部关闭read返回0表示读到文件末尾 2官渡写端没有关闭read阻塞等待数据来 2写管道时 1.管道读端全部关闭进程异常终止 2.管道读端没有关闭 1管道已满write阻塞 2管道未满write写入数据返回实际写入的字节数。
使用管道实现父子通信实现ls |wc -l 父进程实现ls.子进程实现wc -l; 使用管道实现兄弟进程通信兄ls 弟 wc -l 父 等待回收子进程 2FIFO 命名管道不想关的进程也可以进行通信 特点属于基础文件类型的一种FIFO文件在磁盘上没有数据块只有用来表示内核的一条通道各进程可以打开这个文件进行read/write。
创建方式命令 mkfifo 管道名 库函数 int mkfifoconst char*pathname,mode_t mode); 成功0 失败 -1
使用mkfifo创建了一个FIFO就可以用open打开它,常见的i/o函数都可以作用于fifo.
如博客https://blog.csdn.net/superywf/article/details/73438465的例子使用如下