进程间通信第一课--管道

一个进程连接数据流到另一个进程--管道--pipe

进程管道

1 #include <stdio.h>
2 FILE * popen(const char * command, const char * open_mode)
3 int pclose(FILE * stream_to_close);

popen函数允许一个程序将另一个程序作为新进程来启动
并可以传递数据给它或者通过它接收数据
command是要运行的程序名和相应的参数
open_mode必须是r或者是w
r的情况是:被调用程序的输出可以由调用程序使用,调用程序可以利用流指针通过库函数读取被调用程序的输出
w的情况是:调用程序可以用fwrite向被调用程序发送命令,被调用程序可以在自己的标准输入上读取这些数据,
    不会意识到自己正在从另外一个进程读取数据
没有其他的open_mode


函数失败时候返回的是空指针
要是想实现双向管道,通常的解决方法是使用两个管道,每个管道负责一个方向的数据流


pclose调用只在popen启动的进程结束才返回,要是仍在运行的话,就等待进程的结束
返回的结果是关闭的文件流所在的进程的退出码
如果调用进程在调用pclose之前就执行一个wait语句,被调用的进程的退出状态就会丢失。
pclose将返回-1并设置为ECHILD

读取外部程序的输出例程:

 1 #include <unistd.h>
 2 #include <stdlib.h>
 3 #include <stdio.h>
 4 #include <string.h>
 5 
 6 int main()
 7 {
 8     FILE *read_fp;
 9     char buffer[BUFSIZ + 1];
10     int chars_read;
11     memset(buffer, '