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

来源:互联网 发布:湖南自兴人工智能学院 编辑:程序博客网 时间:2024/05/17 03:46

函数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用作汇聚点,在客户进程和服务器进程两者之间传递数据。

0 0
原创粉丝点击