【Linux】popen与system函数

时间:2024-04-07 13:19:18

首先我们来看一下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”。

接下来运行以下代码:

【Linux】popen与system函数

【Linux】popen与system函数

 这样就成功读到了test中的内容。

管道写:

【Linux】popen与system函数

【Linux】popen与system函数 

成功写入。popen的功能有点类似于文件I/O中的fopen函数。

system函数

system("cat "read pipe!">test");

popen可以控制程序的输入或者输出,而system功能稍少一点,无法将命令运行的结果用到程序中,例如ls/cat命令等。但在不需要使用程序I/O数据流的情况下,使用system函数更加便捷。