进程间通信—命名管道

来源:互联网 发布:成都人工智能公司 编辑:程序博客网 时间:2024/06/04 00:28

命名管道,和匿名管道,有了自己的名字,有了名字就可以操作。所以他不在局限于有血缘关系的两个进程之间,适用于任意的两个进程。

实际上和匿名管道一样是一块内核中的缓存,和匿名管道不一样的是,他在文件系统中多了文件,而匿名管道的文件只存在与内存中,但是命名管道的文件虽然存在,有在内核数据结构中有自己的环境,但是在内核中的结点并没有存在数据块,数据的信息和缓存是同步的。

特性:

简单,在任意两个进程里想要通信的时候,只要使用操作文件的方式就可以(提前创建一个fifo文件)

读写操作:

还没有建立起来一个完整管道时,调用read会阻塞。

还没有建立起来一个完整管道时,调用write会阻塞。

建立起来后,关闭读端,写write,会有SIGPIPE信号。

建立起来后,关闭写端,读read,会返回0表示读完了。

完整的管道时,往已满的管道写会阻塞。

完整的管道时,读已空的管道时会阻塞。

创建fifo文件的函数:

int mkfifo(const char*pathname,mode_t mode);

指定路径和权限创建一个fifo文件,成功返回0,失败返回-1,并且设置erron。

使用文件的操作去使用fifo文件,实现通信。

原创粉丝点击