popen函数
我们平时写程序和用终端输入命令的时候,常常会用到管道,比如,在一段程序中,你可能会这样写
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,关注《东方联盟网》微信公众号
>更多相关文章
- 09-29如何通过wrap malloc定位C/C++程序的内存泄漏
- 02-25打车软件大战升级,补贴还能维持多久?
- 12-23BMP文件右旋90度[c语言]
- 12-23寻找直方图中面积最大的矩形(C语言版)
- 12-23[ndk,2]ndk开发案例和错误处理
- 12-23[ndk,1]ndk开发,C语言入门讲解
- 12-23C语言连续存储实现队列机制
- 12-23Objective-c 数据类型
首页推荐
佛山市东联科技有限公司一直秉承“一切以用户价值为依归
- 01-11全球最受赞誉公司揭晓:苹果连续九年第一
- 12-09罗伯特·莫里斯:让黑客真正变黑
- 12-09谁闯入了中国网络?揭秘美国绝密黑客小组TA
- 12-09警示:iOS6 惊现“闪退”BUG
- 01-06马斯克宣布Grok 3即将推出,计算量大幅提升
- 01-06XR市场迎新变局,国内相关企业蓬勃发展
- 01-06盒马新任CEO发全员信 将冲击千亿规模
- 01-06加速AI基础设施投资,微软计划斥资800亿美元
- 01-06雷军透露小米汽车工厂开放参观预约,2025年
相关文章
24小时热门资讯
热门推荐
最新资讯
操作系统
黑客防御