与Linux中文件操作流的标准I/O类似,管道操作也支持基于文件流的模式。
标准流管道就像一系列的创建过程合并到一个函数popen中完成。它所完成的工作主要有以下几步:
1.创建一个管道
2.fork一个子进程
3.在父子进程中关闭不需要的文件描述符。
4.执行exec函数族调用
5.执行函数中所指定的指令
这个函数的使用可以大大减少代码的编写量,但同时也有一些不利之处,例如,它没有前面管道创建的函数灵活多样,并且用popen创建的管道必须使用标准I/O函数进行操作,但不能使用前面的read、write一类不带缓冲的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.代码
- #include<sys/types.h>
- #include<unistd.h>
- #include<stdio.h>
- #include<stdlib.h>
- #include<errno.h>
- #include<memory.h>
- #include<fcntl.h>
- int main()
- {
- char *command="date";
- char *type="r";
- FILE *fp;
- char buf[100];
- fp=popen(command,type);
- if(fp==NULL)
- {
- printf("popen() error!\n");
- exit(0);
- }
- while((fgets(buf,100,fp))!=NULL)
- printf("%s\n",buf);
- pclose(fp);
- exit(0);
- }
5输出
Thu Jun 23 01:49:13 PDT 2011