进程间通信 ---- 管道与FIFO 用法技巧

1.管道的创建

1.1 mkfifo(const char *pathname,mode_t mode);
   函数已隐含指定O_CREAT|O_EXCL,所以它要么创建一个新的FIFO,要么返回EEXIST错误(已存在)。
   所以在创建已存在FIFO或新的FIFO,应该先调用mkfifo,并检查返回值 是否是EEXIST错误,若是EEXIST错误,则调      用open函数。

2.FIFO或管道读写

   2.1对管道或FIFO的write 总是往末尾添加数据,对管道或FIFO的read总是从头开始读的。如果对管道或FIFO调用lseek,就返回ESPIPE的错误
   2.2 进程间通信 注意 读写管道的顺序 防止产生死锁。

3.管道或FIFO的删除

    管道---进程关闭之后,自动消失。
    FIFO --- 调用unlink 从文件系统删除。

4.管道或FIFO的原子操作

原子write属性 往管道或FIFO的写入的数据<=PIPE_BUF(管道缓冲大小),与其他属性无关

5 进程间通信

   写进程关闭管道或FIFO的消息通过read()返回文件结束描述符传给读进程的。
   读进程关闭管道或FIFO的消息通过给写进程传递一个信号。




郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。