标准I/O函数库提供了popen函数,它启动另外一个进程去执行一个shell命令行。
这里我们称调用popen的进程为父进程,由popen启动的进程称为子进程。
popen函数还创建一个管道用于父子进程间通信。子进程要么从管道读信息,要么向管道写信息,至于是读还是写取决于父进程调用popen时传递的参数。下在给出popen、pclose的定义:
view source
print?
01
#include <stdio.h>
02
09
FILE * popen( const char * command,const char * type);
10
11
15
int pclose(FILE * stream);
下面通过例子看下popen的使用:
假如我们想取得当前目录下的文件个数,在shell下我们可以使用:
1
ls | wc -l
我们可以在程序中这样写:
01
02
#include <stdio.h>
03
#include <stdlib.h>
04
#include <errno.h>
05
#include <sys/wait.h>
06
07
#define MAXLINE 1024
08
09
int main()
10
{
11
char result_buf[MAXLINE], command[MAXLINE];
12
int rc = 0; // 用于接收命令返回值
13
FILE *fp;
14
15
16
snprintf(command, sizeof(command), "ls ./ | wc -l");
17
18
19
fp = popen(command, "r");
20
if(NULL == fp)
21
{
22