基于管道的popen和pclose函数

时间:2022-11-25 05:49:51
标准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下我们可以使用:
 
     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