进程间通信----命名管道
Posted ZDF0414
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程间通信----命名管道相关的知识,希望对你有一定的参考价值。
命名管道是一个设备文件,即使不存在血缘关系,只要可以访问该路径,就可以实现进程间的通信 ********************************************************************************************************************************* 一、创建管道 (mkfifo) (1)创建管道的函数 :#man 3 mkfifo
![](https://image.cha138.com/20221209/f32ad4f76b7e4a2b8f1244008083b501.jpg)
![](https://image.cha138.com/20221209/084cd974fb2641bebee476f7c895d3a9.jpg)
![](https://image.cha138.com/20221209/30bed9156e554bf4aaaebf2ae737ca40.jpg)
![](https://image.cha138.com/20221209/97d0a6590b9a490b867044441f056487.jpg)
运行结果:(开启两个终端,一个执行server.c,另一个执行client.c,即可看到server与client之间的通信过程)
![](https://image.cha138.com/20221209/409b76e6053a4a5095ad55f144628e64.jpg)
![](https://image.cha138.com/20221209/ad00041788f84b469aa289fd2614aa42.jpg)
********************************************************************************************************************************* (2)shell 命令创建管道:#man mkfifo 命令: #mkfifo 管道名(默认权限 664)
![](https://image.cha138.com/20221209/e7822af0f4c2480ca09cecfd3f876557.jpg)
![](https://image.cha138.com/20221209/64c1192df0aa4990841b1ac06538bcbe.jpg)
在一个终端上用shell命令创建tmp管道,并在此终端上读取该管道中的数据:
![](https://image.cha138.com/20221209/9386d3e816b14f9abe162938a3077f47.jpg)
![](https://image.cha138.com/20221209/2aa4b3b2537b4051a6ba7fd3dd577077.jpg)
特点: 二、popen系统调用 (1)popen的定义
![](https://image.cha138.com/20221209/7f75de9d503748d180ec9d56b86353cd.jpg)
![](https://image.cha138.com/20221209/7f75de9d503748d180ec9d56b86353cd.jpg)
该函数的特点:本函数与linux中的实现最大的不同是不需要用专门的pclose()函数来关闭文件指针 ,用普通的fclose()即可 ;
(2)popen的使用
![](https://image.cha138.com/20221209/8c8c6c6cd8c4456d908a285f37fd1472.jpg)
********************************************************************************************************************************* 自己实现的popen函数-----mypopen函数: dup2的功能:把输出重定向到fd[1]文件中,即写到管道里去(因为使用exec函数,它会直接输出到标准输出,即显示屏上,而我们需要把它写到管道里去,所以需要对标准输出重定向);
![](https://image.cha138.com/20221209/0bc4d1df9ec6430fa642114bde45f74a.jpg)
![](https://image.cha138.com/20221209/3a39760ae7cc4597b518d16bcaff4466.jpg)
以上是关于进程间通信----命名管道的主要内容,如果未能解决你的问题,请参考以下文章