LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 572|回复: 8

如何同时重定向新运行的程序的输入和输出?

[复制链接]
发表于 2004-7-13 06:30:04 | 显示全部楼层 |阅读模式
我用popen(char *file, char *type),但man 里说 type 只能是"w"或"r"。

我想同时处理新运行的程序的输入和输出,应该怎样做?谢谢!
发表于 2004-7-13 10:19:31 | 显示全部楼层
发表于 2004-7-13 10:20:00 | 显示全部楼层
是不是linux下没有实现双向读写啊。BSD下面是实现了的,可以用r+表示同时支持读写
发表于 2004-7-13 10:24:58 | 显示全部楼层
这是manpage中的解释:
       The  popen()  function opens a process by creating a pipe, forking, and
       invoking the shell.  Since a pipe is by definition unidirectional,  the
       type  argument  may  specify  only  reading  or  writing, not both; the
       resulting stream is correspondingly read-only or write-only.
 楼主| 发表于 2004-7-13 13:46:20 | 显示全部楼层
斑竹提供的方法其实我都知道了。

不过子程序不是我写的,要调用其他程序,
模拟用户操作,并回显。(要求兼容性要好,不能只在BSD上实现)

我曾经看了popen的实现代码。其中用了fork,重定向STDIN或STDOUT
然后exec*覆盖了当前进程。

现在的问题是:如果我在GTK程序中用fork,会不会造成内存浪费呢?

(其实如果能找到更好的重定向方法就更好了,这也是我发帖子的原因)
发表于 2004-7-13 19:19:55 | 显示全部楼层
为什么要考虑内存浪费呢?
难道fork()会浪费内存吗?
发表于 2004-7-13 21:36:55 | 显示全部楼层
又不是vfork,多了还是很可怕的吧
发表于 2004-7-14 07:56:11 | 显示全部楼层
一般情况下不会先考虑这个,如果在测试时发现确实有问题,才进行调整。
发表于 2004-7-14 08:31:23 | 显示全部楼层
Linux下类似于pipe()的双向管道创建函数是socketpair()
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表