当前位置:网站首页>unix环境编程 第十五章 15.3 函数popen和pclose
unix环境编程 第十五章 15.3 函数popen和pclose
2022-08-09 10:26:00 【玛丽苏打肉饼】
常见的操作是创建一个连接到另一个进程的管道,然后读其输出或向其输入端发送数据,为此,标准I/O库提供了两个函数popen和函数pclose。
#include <stdio.h>
FILE *popen(const char *cmdsring,const char *type);
//成功返回文件指针,出错返回NULL
int pclose(FILE *fp);
//成功返回cmdstring的终止状态,失败返回-1函数popen先执行fork,然后调用exec执行cmdstring,并且返回一个标准I/O文件指针,
如果type是"r",则文件指针连接到cmdstring的标准输出
如果type是"w",则文件指针链接到cmdstring的标准输出。
pclose的函数关闭标准I/O流,等待命令终止,然后返回shell的终止状态。
#include "apue.h"
#include <sys/wait.h>
#define PAGER "${PAGER:-more}"
int main(int argc,char *argv[])
{
char line[MAXLINE];
FILE *fpin,*fpout;
if(argc!=2)
err_quit("usage:a.out<pathname>");
if((fpin=fopen(argv[1],"r"))==NULL)
err_sys("can not open %s",argv[1]);
if((fpout=popen(PAGER,"w"))==NULL)
err_sys("popen error");
while(fgets(line,MAXLINE,fpin)!=NULL)
{
if(fputs(line,fpout)==EOF)
err_sys("fputs error to pipe");
}
if(ferror(fpin))
err_sys("fgets error");
if(pclose(fpout)==-1)
err_sys("pclose error");
exit(0);
}每次调用popen的时候,因该记住所创建的子进程的进程ID,以及其文件描述符或者FILE指针,我们选择在数组childpid中保存子进程ID,我们选择在数组childpid中保存子进程ID,并用文件描述符作为其下标。
若pclose的调用者已经为信号SIGCHILD设置了一个信号处理程序,则pclose中的waitpid调用将返回一个错误EINTER.
如果应用程序调用waitpid,并且获得了popen创建的子进程的退出状态,那么我们会在应用程序调用pclose时调用waitpid,如果发现子进程已不再存在,将返回-1,将error设置为ECHILD。
边栏推荐
- Umi Hooks
- Celebrate ranked 18
- 主从postition变化无法锁定_Slave_IO_Running显示No_Slave_Sql_Running显示No---Mysql主从复制同步002
- RTP
- MySQL全文索引
- cannot import name ‘load_offloaded_weights‘ from ‘accelerate.utils‘ (/home/huhao/anaconda3/envs/huha
- Redis + NodeJS 实现一个能处理海量数据的异步任务队列系统
- xmms已经发布到v1.3了,好久没写博客了
- Browser error classification
- 多行省略和选择器
猜你喜欢

机器学习--朴素贝叶斯(Naive Bayes)
![[ASM] Bytecode operation MethodVisitor case combat generation object](/img/a9/df07614f875794d55d530bd04dc476.jpg)
[ASM] Bytecode operation MethodVisitor case combat generation object

蓄电池建模、分析与优化(Matlab代码实现)

自定义类型:结构体,枚举,联合

3D打印了这个杜邦线理线神器,从此桌面再也不乱了
![[项目配置] 配置Qt函数库和ui界面库的封装并调用的项目](/img/e9/d41f144a2f27e76f97cd6401d37578.png)
[项目配置] 配置Qt函数库和ui界面库的封装并调用的项目

拿下跨界C1轮投资,本土Tier 1高阶智能驾驶系统迅速“出圈”

Cpolar内网穿透的面板功能介绍

笔记本电脑使用常见问题,持续更新

Battery modeling, analysis and optimization (Matlab code implementation)
随机推荐
浅析JWT安全问题
EndNote User Guide
面试官:MySQL 中 update 更新,数据与原数据相同时会执行吗?大部分人答不上来!
[Halcon&几何] 直线的垂线与延长线的计算
Redis cache update strategy actively
Qt 国际化翻译
ArrayList和LinkedList
深度学习--自编码器(AutoEncoder)
相伴成长,彼此成就 用友U9 cloud做好制造业数智化升级的同路人
MySQL备份与恢复
函数二
cannot import name ‘load_offloaded_weights‘ from ‘accelerate.utils‘ (/home/huhao/anaconda3/envs/huha
关于页面初始化
3D printed this DuPont cable management artifact, and the desktop is no longer messy
[项目配置] 配置Qt函数库和ui界面库的封装并调用的项目
基本运算符
1002 写出这个数 (20 分)
Attentional Feature Fusion
10000以内素数表(代码块)
3D打印了这个杜邦线理线神器,从此桌面再也不乱了