前面我们讲了进程间通信的一种方式,共享内存。下面看一看另一种机制,匿名管道。
1.什么是管道
管道是一个进程的数据流到另一个进程的通道,即一个进程的数据输出作为另一个进程的数据输入,管道起到了桥梁的作用。
比如,在shell中输入命令:ls -l|grep string,ls和grep是两个进程,"|"符号表示管道,意思是执行ls -l进程,并将输出结果result_1,作为grep string进程的输入result_0,grep进程将result_0中存在字符串string的信息打印到屏幕。
2.管道的使用
1)popen函数:启用一个新进程,并可以向它传递数据,或者通过它接受数据。
FILE *popen(const char *command,conse char *open_mode);
command:运行的程序名和参数
open_mode:有两个值"r(只读)","w(只写)"
"r":可以获取新进程的输出
"w":可以向新进程发送数据
返回值:返回输入输出文件流指针
2)pclose函数:关闭输入输出文件流指针
若调用该函数时,新进程仍然在运行,则pclose将等待,直至新进程结束。
返回值:返回新进程的退出码。
3.popen函数使用示例
下例循环读取read_fp输出文件流的内容,写入write_fp的输入文件流,直到输出流内容读完。
#include<stdlib.h> #include<stdio.h> #include<string.h> int main() { FILE *read_fp = NULL; FILE *write_fp = NULL; char buffer[BUFSIZ+1]; int chars_read = 0; //初始化缓冲区 memset(buffer,'