与Linux中文件操作流的标准I/O类似,管道操作也支持基于文件流的模式。

标准流管道就像一系列的创建过程合并到一个函数popen中完成。它所完成的工作主要有以下几步:

1.创建一个管道

2.fork一个子进程

3.在父子进程中关闭不需要的文件描述符。

4.执行exec函数族调用

5.执行函数中所指定的指令

这个函数的使用可以大大减少代码的编写量,但同时也有一些不利之处,例如,它没有前面管道创建的函数灵活多样,并且用popen创建的管道必须使用标准I/O函数进行操作,但不能使用前面的readwrite一类不带缓冲的I/O函数与之对应,关闭用popen创建的流管道必须使用函数pclose来关闭该管道流。该函数关闭标准I/O流,并等待命令执行结束。

1.表头文件

#include <

stdio.h>

2.原函数

FILE *popen(char *command,char *type);

返回值:成功,返回一个新的文件流,失败,返回NULL

参数:command是所要执行的命令,type控制数据流的方向,r或者w

3.关闭

int pclose(FILE *stream);

4.代码

 

 
  
  1. #include<sys/types.h> 
  2. #include<unistd.h> 
  3. #include<stdio.h> 
  4. #include<stdlib.h> 
  5. #include<errno.h> 
  6. #include<memory.h> 
  7. #include<fcntl.h> 
  8. int main() 
  9.   char *command="date"
  10.   char *type="r"
  11.   FILE *fp; 
  12.   char buf[100]; 
  13.    
  14.  fp=popen(command,type); 
  15.  if(fp==NULL) 
  16.  { 
  17.   printf("popen() error!\n"); 
  18.   exit(0); 
  19.  } 
  20.  
  21.  while((fgets(buf,100,fp))!=NULL) 
  22.        printf("%s\n",buf); 
  23.      
  24.   pclose(fp); 
  25.    exit(0); 
  26.    

5输出

Thu Jun 23 01:49:13 PDT 2011