unix – 如何捕获execvp的输出
发布时间:2020-12-15 18:59:34 所属栏目:安全 来源:网络整理
导读:我正在开发一个使用execvp执行程序的程序.它需要捕获子进程的结果并在主进程中解析它们.似乎有一种方法,使用命名管道和重复.我试图找到一个很好的例子,但到目前为止还没有运气.如果有人对此有任何指示,链接和/或建议,我将非常感激. 你不需要命名管道;未命名
我正在开发一个使用execvp执行程序的程序.它需要捕获子进程的结果并在主进程中解析它们.似乎有一种方法,使用命名管道和重复.我试图找到一个很好的例子,但到目前为止还没有运气.如果有人对此有任何指示,链接和/或建议,我将非常感激.
你不需要命名管道;未命名的管道工作得很好.实际上,通常你可以使用popen而不是自己做管道/ fork / dup / exec. popen的工作原理如下(尽管你的libc实现可能有更多的错误检查):
FILE *popen(const char *command,const char *type) { int fds[2]; const char *argv[4] = {"/bin/sh","-c",command}; pipe(fds); if (fork() == 0) { close(fds[0]); dup2(type[0] == 'r' ? 0 : 1,fds[1]); close(fds[1]); execvp(argv[0],argv); exit(-1); } close(fds[1]); return fdopen(fds[0],type); } 这会创建一个未命名的管道和叉子.在孩子中,它将stdout(或stdin)重新连接到管道的一端,然后执行孩子.父母可以简单地从管道的另一端读取(或写入). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- angularjs – 更改服务数据时更新范围值
- angular-material – 安装Angular Material时发出
- Angular6 – 未加载空路径的子路由
- 使用enter键作为选项卡仅使用angularjs和jqlite
- webservice 远程方法调用核心步骤
- angularjs – Angular.js如何将$scope注入$scope
- 如何在两个或更多Heroku dynos上运行流星应用程序
- WebService系列博客{八}[XJC命令转换Schema约束至
- 用于vim和不正确背景颜色的Solarized colorschem
- scala – 播放/记录/打印响应正文/运行枚举器/缓
热点阅读