您的位置:首页 > 编程语言

unix环境高级编程-进程间通信(2)

2016-08-08 21:36 197 查看
函数popen和pclose:

常见的操作是创建一个连接到另一个进程的管道,然后读其输出或向其输入端发送数据,这两个函数实现的操作是:创建一个管道,fork一个子进程,关闭未使用的管道端,执行一个shell运行命令,然后等待命令终止。



函数popen执行fork,调用exec执行cmdstring,返回一个标准IO文件指针,如果type是r,则文件指针连接到cmdstring的标准输出,而如果type是w,则文件指针连接都cmdstring的标准输入,这两者情况如下图所示



这种情况和fopen类似,如果type是r,则返回的文件指针是可读的,如果type是w,则是可写的。

pcolse函数关闭标准IO流,等待命令终止,然后返回shell终止状态。

协同进程:

unix系统过滤程序从标准输入读取数据,向标准输出写数据,几个过滤程序通常在shell管道中线性连接,当一个过滤程序既产生某个过滤程序的输入,又读取该过滤程序的输出时,它就变成了协同进程。

FIFO:被称为命名管道,未命名的管道只能在两个相关的进程之间使用,而且这两个相关的进程还有一个共同创建了它们的祖先进程,但是通过FIFO,不相关的进程也能交换数据。

FIFO是一种文件类型,通过stat结构的st_mode成员的编码可以知道是否是FIFO类型。



mkfifo函数中mode参数的规格说明和open函数的mode相同

mkfifoat函数和mkfifo类似,但是mkfifoat函数可以被用来在fd文件描述符表示的目录相关位置创建一个FIFO。

FIFO有以下两种用途:

1.shell命令使用FIFO将数据从一条管道传送到另一条时,无需创建中间临时文件。

2.客户进程-服务器进程应用程序中,FIFO用作汇聚点,在客户进程和服务器进程两者之间传递数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐