当前位置:网站首页>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。
边栏推荐
猜你喜欢
机器学习-逻辑回归(logistics regression)
相伴成长,彼此成就 用友U9 cloud做好制造业数智化升级的同路人
Electron application development best practices
深度学习--神经网络(基础讲解)
OneNote 教程,如何在 OneNote 中搜索和查找笔记?
Cpolar内网穿透的面板功能介绍
3D printed this DuPont cable management artifact, and the desktop is no longer messy
2021-01-11-雪碧图做表情管理器
mongodb学习笔记
2022强网杯WP
随机推荐
How to quickly get through the mirror release process?
集合与函数
Restful WebServices 学习笔记
基于信号量与环形队列实现读写异步缓存队列
The GNU Privacy Guard
LeetCode(剑指 Offer)- 25. 合并两个排序的链表
Multi-threaded cases - timer
多行省略和选择器
深度学习--自编码器(AutoEncoder)
学习NET-SNMP之二-----------VisualStudio编译Net-SNMP
浅析JWT安全问题
主从postition变化无法锁定_Slave_IO_Running显示No_Slave_Sql_Running显示No---Mysql主从复制同步002
程序员的专属浪漫——用3D Engine 5分钟实现烟花绽放效果
TELNET协议相关RFC
Quick sort eight sorts (3) 】 【 (dynamic figure deduction Hoare, digging holes, front and rear pointer method)
通过Doc在MySQL数据库中建表
相伴成长,彼此成就 用友U9 cloud做好制造业数智化升级的同路人
技术分享 | 使用 cURL 发送请求
xmms的均衡器试验成功 音效相当不错 比rockbox可能还要好
Transformer+Embedding+Self-Attention原理详解