首先我们来看一下popen函数:
用man命令来查看popen会看到这样的介绍:
Name:popen,pclose--pipe stream to or from a process
Synopsis:
#include <stdio.h>
FILE* popen(const char * command,const char * type);
int pclose(FILE * stream);
popen总是和pclose一起出现并被使用的。popen()借助fork或invoke创建一个子进程进而来创建一个管道,由于在管道中,数据流是单向的,command只能产生stdout或者读取stdin,type只有两个值:'w'和'r'。r表示command从管道中读取数据流,而w表示command的stdout输出到管道中。command无法同时读取和输入。popen返回值为该FIFO数据流的指针。
代码实现管道读:
首先创建一个test文件,在其中写入“read pipe”。
接下来运行以下代码:
这样就成功读到了test中的内容。
管道写:
成功写入。popen的功能有点类似于文件I/O中的fopen函数。
system函数:
system("cat "read pipe!">test");
popen可以控制程序的输入或者输出,而system功能稍少一点,无法将命令运行的结果用到程序中,例如ls/cat命令等。但在不需要使用程序I/O数据流的情况下,使用system函数更加便捷。