您的位置:首页 > 运维架构 > Linux

Linux进程通信 标准流管道

2011-06-23 15:55 295 查看
与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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 职场 休闲