popen函数

浏览:1163 ℃
字体:
发布时间:2013-12-09 23:23:28
来源:

我们平时写程序和用终端输入命令的时候,常常会用到管道,比如,在一段程序中,你可能会这样写

int fd[2]; pipe(fd)

这时,我们就创建了一个管道,实现了进程之间的通信。

再比如,我们用终端的时候,我们可能会这样输入命令: ls -la | grep test

我们也是在两个命令之间创建了一个管道。

这篇文章介绍一个函数,用来创建管道的函数:popen

首先,我们先看看 man page 给的函数原型:

#include
FILE *popen(const char *command, const char *type);

int pclose(FILE *stream);

下面看看一段测试程序:

/* * popen_main.c * *  Created on: 2013年11月28日 *      Author: DLUTBruceZhang */#include #include #include #define MAX_BUF_LEN			4096int main(int argc, char **argv, char **environ){	char *buf = NULL;	buf = (char*)malloc(sizeof(char) * MAX_BUF_LEN);	FILE *file = popen("ls -la", "r");		/*子进程执行 ls -la ,并把输出写入管道中*/	memset(buf, 0, sizeof(buf));	while (!feof(file))	{		fgets(buf, MAX_BUF_LEN, file);		/*另一个进程读取管道中的内容*/		printf("%s", buf);	}	pclose(file);	free(buf);	return 0;}

首先,我用 popen 创建了一个管道,并执行了一个命令 “ls -la”, popen函数会调用 fork 和 pipe,所以,这个命令是一个子进程执行的,由于管道之间的共享可以发生在父子进程之间,所以,命令的输出可以由父进程读取,之后显示出来,下面的就是这段程序的输出:

总用量 32drwxrwxr-x  3 administrator administrator  4096 2013-11-28 09:58 .drwxrwxr-x 13 administrator administrator  4096 2013-11-28 09:58 ..-rw-rw-r--  1 administrator administrator 10812 2013-11-28 09:58 .cprojectdrwxrwxr-x  2 administrator administrator  4096 2013-11-28 10:05 Debug-rw-rw-r--  1 administrator administrator   487 2013-11-28 10:05 popen_main.c-rw-rw-r--  1 administrator administrator   762 2013-11-28 09:58 .project-rw-rw-r--  1 administrator administrator   762 2013-11-28 09:58 .project


报名学习加微信/QQ 1602007,关注《东方联盟网》微信公众号
>更多相关文章
学IT 找东方联盟
办理会员 学技术到东方联盟
资讯 | QQ | 安全 | 编程 | 数据库 | 系统 | 网络 | 考试 | 站长 | 关于东联 | 安全雇佣 | 搞笑视频大全 | 微信学院 | 视频课程 |
关于我们 | 联系我们 | 广告服务 | 免责申明 | 作品发布 | 网站地图 | 官方微博 | 技术培训
Copyright © 2007 - 2024 Vm888.Com. All Rights Reserved
粤公网安备 44060402001498号 粤ICP备19097316号 请遵循相关法律法规
');})();