linux popen管道,linux进程通信之标准流管道popen

当我们在调用popen()会创建一个管道,其实popen()会调用fork()函数产生一个子进程,执行shell以运行命令开启一个,并把执行结果写入管道中,然后返回一个文件指针。程序通过文件指针可读取管道中的内容。使用popen()创建的标准管道流需要plcose()进行关闭。

该函数的原型是FILE * popen(const char* command, const char *type);

command:使我们要执行的命令,即上述的运行命令,

type:有两种可能的取值,“r”(代表读取)或者“w"(代表写入)

popen()会调用fork()产生子进程,然后从子进程中调用/bin/sh-c来执行参数command的指令,参数type可使用“r”读取

或者“w”写入,根据type的值,popen()会创建管道连接到子进程的标准输出设备或者标准输入设备,然后返回一个文件指针。随后进程就可以利用此文件指针来读取子进程的标准输出设备或者写入子进程的标准输入设备。

个人总结:记住,向这个流中写内容相当于写入该命令(或者是该程序)标准输入;

向这个流中读数据相当于读取该命令(或者是该程序)的标准输出

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

该upcase命令或者程序用于实现将标准输入中的大写字母转换成小写

这里popen()函数中type参数“w”的功能就相当于给upcase.c中传入参数,同理

如果我们把type的值“w”改为“r”的话,就更好理解了,我们就可以通过FILE *fp =

popen(command,"r"),,command的标准输出到了管道,我们就可以读取管道中的内容了,也就是从标准流管道中读取数据就是读取该命令的标准输出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值