当前位置:网站首页>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。
边栏推荐
猜你喜欢
编解码(seq2seq)+注意机制(attention) 详细讲解
Demand side power load forecasting (Matlab code implementation)
机器学习--线性回归(Linear Regression)
【报错记录】解决华擎J3455-ITX不插显示器无法开机的问题
Quick sort eight sorts (3) 】 【 (dynamic figure deduction Hoare, digging holes, front and rear pointer method)
笔记本电脑使用常见问题,持续更新
分类预测 | MATLAB实现CNN-GRU(卷积门控循环单元)多特征分类预测
antd表单
上传张最近做的E2用的xmms的界面的截图
对话跨国消费品牌DPO:数据安全合规从何做起?8.11直播见!
随机推荐
踩坑scrollIntoView
2021-01-11-雪碧图做表情管理器
对话跨国消费品牌DPO:数据安全合规从何做起?8.11直播见!
【 size_t is unsigned integer (1 > 10) - > 1.
相伴成长,彼此成就 用友U9 cloud做好制造业数智化升级的同路人
排序1:冒泡排序
一天半的结果——xmms on E2
WUSTOJ:n个素数构成等差数列
集合与函数
hover内部指定子类的样式
基本运算符
Tom Morgan | Twenty-One Rules of Life
学习NET-SNMP之一 ---------编译NET-SNMP程序。
Win7 远程桌面限制IP
MySQL全文索引
electron 应用开发优秀实践
写一个通讯录小程序
Transformer+Embedding+Self-Attention原理详解
第二周作业
Received your first five-figure salary