Linux中popen函数的作用小结
概述
popen()函数通过创建一个管道,调用fork()产生一个子进程,执行一个shell以运行命令来开启一个进程。这篇文章重点给大家介绍Linux中popen函数的作用,感兴趣的朋友一起看看吧
popen函数介绍
函数定义
#include <stdio.h>
FILE * popen(const char *command , const char *type );
int pclose(FILE *stream);
函数说明
popen()函数通过创建一个管道,调用fork()产生一个子进程,执行一个shell以运行命令来开启一个进程。这个管道必须由pclose()函数关闭,而不是fclose()函数。pclose()函数关闭标准I/O流,等待命令执行结束,然后返回shell的终止状态。如果shell不能被执行,则pclose()返回的终止状态与shell已执行exit一样。
type参数只能是读或者写中的一种,得到的返回值(标准I/O流)也具有和type相应的只读或只写类型。如果type是"r"则文件指针连接到command的标准输出;如果type是"w"则文件指针连接到command的标准输入。
command参数是一个指向以NULL结束的shell命令字符串的指针。这行命令将被传到bin/sh并使用-c标志,shell将执行这个命令。
popen()的返回值是个标准I/O流,必须由pclose来终止。前面提到这个流是单向的(只能用于读或写)。向这个流写内容相当于写入该命令的标准输入,命令的标准输出和调用popen()的进程相同;与之相反的,从流中读数据相当于读取命令的标准输出,命令的标准输入和调用popen()的进程相同。
返回值
如果调用fork()或pipe()失败,或者不能分配内存将返回NULL,否则返回标准I/O流。popen()没有为内存分配失败设置errno值。如果调用fork()或pipe()时出现错误,errno被设为相应的错误类型。如果type参数不合法,errno将返回EINVAL。
参数说明
- command: 是一个指向以 NULL 结束的 shell 命令字符串的指针。这行命令将被传到 bin/sh 并使用 -c 标志,shell 将执行这个命令。
- mode: 只能是读或者写中的一种,得到的返回值(标准 I/O 流)也具有和 type 相应的只读或只写类型。如果 type 是 “r” 则文件指针连接到 command 的标准输出;如果 type 是 “w” 则文件指针连接到 command 的标准输入。
作用
popen函数允许一个程序将另外一个程序作为新进程来启动,并可以传递数据或者通过它接受数据。
其内部实现为调用 fork 产生一个子进程,执行一个 shell, 以运行命令来开启一个进程,这个进程必须由 pclose() 函数关闭。
缺点
使用popen的不好影响是,针对每个popen调用,不仅要启动一个被请求的程序,还要启动一个shell,即每个popen调用将多启动两个进程。
举例
#include<stdio.h>
#include<unistd.h>
#include<string.h>
int main()
{ FILE *fp=NULL; FILE *fh=NULL; char buff[128]={0}; memset(buff,0,sizeof(buff)); fp=popen("ls -l","r");//将命令ls-l 同过管道读到fp fh=fopen("shell.c","w+");// 创建一个可写的文件 fread(buff,1,127,fp);//将fp的数据流读到buff中 fwrite(buff,1,127,fh);//将buff的数据写入fh指向的文件中 pclose(fp); fclose(fh); return 0;
}
参考资料
https://www.jb51.net/article/140783.htm
https://www.xuebuyuan.com/3236032.html
Linux中popen函数的作用小结相关推荐
- linux中popen函数,system函数与popen函数
为了更好的理解system()函数返回值,需要了解其执行过程,实际上system()函数执行了三步操作: fork一个子进程: 在子进程中调用exec函数去执行command: 在父进程中调用wait ...
- Linux中fork函数的作用及用法
https://blog.csdn.net/weixin_40853073/article/details/81873398
- linux中probe函数传递参数的寻找(下)
点击打开链接 linux中probe函数传递参数的寻找(下) 通过追寻driver的脚步,我们有了努力的方向:只有找到spi_bus_type的填充device即可,下面该从device去打通,当两个 ...
- STM32中NVIC_SystemReset()函数的作用?什么时候用?
STM32中NVIC_SystemReset()函数的作用?什么时候用? STM32软件复位有两种方式 (1)方式一:NVIC_SystemReset()函数用来复位STM32. 注意1:从SYSRE ...
- linux中 probe函数的何时调用的?
点击打开链接 linux中 probe函数何时调用的 所以的驱动教程上都说:只有设备和驱动的名字匹配,BUS就会调用驱动的probe函数,但是有时我们要看看probe函数里面到底做了什么,还有传递给p ...
- 每天学一点儿shell:linux中时间函数的date的用法
文章目录 1.linux中date函数格式 2.date日期函数的具体用法 2.1.获取相应格式的日期 2.2.获取相隔时间段的日期 2.2.1.获取今天的日期 2.2.2.获取昨天的日期 2.2.3 ...
- SOCKET编程中,select()函数的作用
SOCKET编程中,select()函数的作用Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect.accep ...
- linux中request_region()函数的分析
linux中request_region()函数的分析 struct resource ioport_resource = { .name = "PCI IO", .start = ...
- 计算机语言中str是什么意思,python中str函数的作用是什么
python中str函数的作用是什么 发布时间:2021-04-27 16:12:24 来源:亿速云 阅读:56 作者:Leah python中str函数的作用是什么?相信很多没有经验的人对此束手无策 ...
最新文章
- 人工智能案例TOP50,AI是干出来的,不是吹出来的
- 参数 ByVal 和 ByRef 区别
- TextureView
- jquery较验组织机构编码
- @Controller,@Service,@Repository,@Component详解
- JavaScript高级之构造函数和原型
- 函数式编程 读书笔记
- 概率论与数理统计思维导图_数学思维到底有多重要?这个学科往往影响国家实力...
- box-sizing布局(简要介绍)
- 敏感词过滤算法Aho-Corasick
- Android腾讯微博开放平台入门(三)Oauth授权
- c语言中windows头文件,windows与linux 标准c语言头文件
- Thinkphp6 think-queue redis 执行异步任务
- 用java根据年份判断生肖_怎样根据年份确定生肖
- 电池SOC仿真系列-基于粒子群算法电池参数辨识
- Verilog模块语法
- 微信小程序头像为什么是模糊的?小程序头像模糊怎么办?
- 软考题目之头结点、头指针和首元节点
- 【QT 5 设置自定义标题栏+学习:《QT实现鼠标拖动调整窗口大小》+基础样例】
- 前端的Vue相关的项目经验
热门文章
- 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之组合模式
- 欧瑞变频器800参数设置_传授你欧瑞变频器频率的设置方法
- Qin.Data发布及 使用说明
- Hi3531DV100开发环境的搭建(含交叉编译器的安装及官方SDK安装)
- NLP实战(三)实现拼写纠错
- 个人一年工作情况总结报告
- matlab编程是用c语言吗,matlab调用c语言编程.doc
- 利用批处理bat批量处理word文档属性
- php 公众号token认证,微信公众号开发——Token认证
- 《梁启超家书》笔记二——一个人若是在舒服的环境中会消磨志气,那么在困苦懊丧的环境中也一定会消磨志气