[apue] 使用 popen/pclose 的一点疑问
当我们需要将输出作为标准输入传递给一个命令,或者将一个命令的输出作为标准输入来读取,
一般会想到使用pipe与fork相结合的方式,来重定向标准输入/输出给指定命令。
popen/pclose 帮助我们简化了上述工作,只需要调用:
FILE* fpout = popen("more", "w");
就可以将输出写入more命令。只需要调用:
FILE* fpin = popen("ls -l .", "r");
就可以从输入读取ls命令的输出内容。
apue上有一段是这样说明 popen 内部的工作原理的:
“这两个函数实现的操作是:创建一个管道,调用fork产生一个子进程,关闭管道的不使用端,
执行一个shell以运行命令,然后等待命令终止。”
写了一个程序验证一下:
程序运行后,使用另一个命令窗口查看进程ID:

分别对23153与23154调用lsof查看管道信息:

可以看到在子进程more中确实有名为pipe的FIFO命名管道,但是在父进程中却找不到相应的管道,这是怎么回事呢……
这个疑问已有解答,请移步:
[apue] 使用 popen/pclose 的一点疑问的更多相关文章
- [apue] popen/pclose 疑点解惑
问题请看这里: [apue] 使用 popen/pclose 的一点疑问 当时怀疑是pclose关闭了使用完成的管道,因此在pclose之前加一个足够长的sleep,再次观察进程文件列表: 哈哈,这下 ...
- popen&pclose管道方式操作shell命令
popen, pclose - pipe stream to or from a process FILE *popen( const char *command, const char *type) ...
- 一道面试题引发的对 Java 内存模型的一点疑问
一道面试题引发的对Java内存模型的一点疑问 问题描述 如上图所示程序,按道理,子线程会通过 num++ 操作破坏 while 循环的条件,从而终止循环,执行最后的输出操作.但在我的多次运行中,偶尔会 ...
- popen pclose 不等待命令执行完毕
$handle = popen("start D:\\test.bat", "r"); //exec("start D:\\test.bat" ...
- Linux popen/pclose
popen() 函数 #include <stdio.h>FILE * popen(const char *command , const char *type );int pclose( ...
- popen()/pclose()阻塞性问题验证
背景: popen()函数通过创建一个管道,调用fork()产生一个子进程,执行一个shell以运行命令来开启一个进程.这个管道必须由pclose()函数关闭,而不是fclose()函数. pclos ...
- popen && pclose函数
1. 函数操作: 创建一个管道,调用fork产生一个子进程,关闭管道的不使用端,执行一个shell以运行命令,然后等待命令终止: 2. 函数原型: #include <stdio.h> F ...
- popen, pclose - process I/O
SYNOPSIS #include <stdio.h> FILE *popen(const char *command, const char *type); int pclose(FIL ...
- 个人对于React的Diff算法的一点疑问(待更新)
本人对于Diff算法也并未做深入研究,只是大概的看过一些博文了解了些原理,但依然有了如下疑问 : 对于vdom所表示的对象中,若在该oldObj和newObj之间,发现一个元素节点所表示的子对象不见了 ...
随机推荐
- 从源码角度看MySQL memcached plugin——1. 系统结构和引擎初始化
本章尝试回答两个问题: 一.memcached plugin与MySQL的关系: 二.MySQL系统如何启动memcached plugin. 1. memcached plugin与MySQL的关系 ...
- scipy —— 丰富的子包(io、cluster)
io,顾名思义,input/output,输入输出接口: 1. io Input and output (scipy.io) - SciPy v0.18.1 Reference Guide wavfi ...
- Java之nio MappedByteBuffer的资源释放问题
使用nio的MappedByteBuffer映射内存, 在最后执行File.delete()方法的时候, 返回false, 即文件没有被删除. 原因是MappedByteBuffer在内存中也会创建 ...
- js 指向表格行变色,离开恢复
<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...
- jquery获取选中的值和设置单选扭选中
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- 从一段简单算法题来谈二叉查找树(BST)的基础算法
先给出一道很简单,喜闻乐见的二叉树算法题: 给出一个二叉查找树和一个目标值,如果其中有两个元素的和等于目标值则返回真,否则返回假. 例如: Input: 5 / \ 3 6 / \ \ 2 4 7 T ...
- Win8 Metro(C#)数字图像处理--2.74图像凸包计算
原文:Win8 Metro(C#)数字图像处理--2.74图像凸包计算 /// <summary> /// Convex Hull compute. /// </summary> ...
- 微信小程序把玩(六)模块化
原文:微信小程序把玩(六)模块化 模块化也就是将一些通用的东西抽出来放到一个文件中,通过module.exports去暴露接口.我们在最初新建项目时就有个util.js文件就是被模块化处理时间的 /* ...
- 解决Delphi的Indy10组件包TIdHttpServer控件解码HTTP请求时参数乱码的问题
Delphi6下使用Indy10组件包,其中的TIdHttpServer控件在处理HTTP请求的时候 不能正确解码含有汉字的参数,如: http://127.0.0.1/test?cmd=open&a ...
- Qt中加载Libevent静态库(通过reimp和rs两条语句将lib转为a)
文章来源:http://blog.sina.com.cn/s/blog_731bf4c90102wnpr.html 本文仅是个人经验总结,若有错误欢迎指教! 最近要做一个跨平台的项目,同时也涉及到网络 ...