一个进程连接数据流到另一个进程--管道--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, '