popen && pclose函数

1. 函数操作:

创建一个管道,调用fork产生一个子进程,关闭管道的不使用端,执行一个shell以运行命令,然后等待命令终止;

 

2. 函数原型:

#include <stdio.h>

FILE *popen(const char *cmdstring, const char *type);

ret = 成功返回文件指针,失败返回NULL

int pclose(FILE *fp);

ret = cmdstring的终止状态,失败返回-1

函数popen先执行fork,然后调动exec执行cmdstring,并且返回一个标准IO文件指针,如果type='r',则文件指针连接到cmdstring的标准输出,如果type='w',则文件指针连接

到cmdstring的标准输入;

函数pclose关闭IO流,等待命令执行结束,返回shell终止状态,如果shell不能被执行,则返回终止状态与shell执行exit(127)一样;

 

3. 与system函数比较:

popen函数可以通过管道和shell进程进行通信,而system只是执行命令返回是否成功,如果程序中不需要与shell有数据交互,使用system比较适合;

 

4. 测试代码:执行ls . 获取当前目录中文件列表

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 #define BUF_LEN 128
 5 
 6 int main(int argc, char * argv[])
 7 {
 8     FILE *fp = NULL;
 9 
10     char buf[BUF_LEN] = { 0 };
11 
12     if ((fp = popen("ls .", "r")) == NULL){
13         perror("popen error\n");
14         return -1;
15     }
16 
17     while (fgets(buf, BUF_LEN, fp) != NULL){
18         printf("%s", buf);
19     }
20 
21     pclose(fp);
22 
23     return 0;
24 }

结果:

test_popen
test_popen.c

 

转载于:https://www.cnblogs.com/wanpengcoder/p/5296578.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值