【发布时间】:2013-08-06 12:07:07
【问题描述】:
我正在使用 FreeBSD 和 C/C++ 来控制机器人。 这是问题:
我使用popen()在写模式下向计算机发出命令以控制机器人。所以现在我想获取命令的输出,所以我在阅读模式下创建另一个popen() 来获取它。
它会起作用吗?
我应该创建某种父子进程吗?
【问题讨论】:
标签: c unix process freebsd popen
我正在使用 FreeBSD 和 C/C++ 来控制机器人。 这是问题:
我使用popen()在写模式下向计算机发出命令以控制机器人。所以现在我想获取命令的输出,所以我在阅读模式下创建另一个popen() 来获取它。
它会起作用吗?
我应该创建某种父子进程吗?
【问题讨论】:
标签: c unix process freebsd popen
所以现在我想获取命令的输出,所以我创建了另一个 popen() 在阅读模式下获取它。
不行,使用popen(3) 创建一个额外的流是行不通的。然而,既然您使用的是 FreeBSD,那么您很幸运:在 FreeBSD 上,管道是双向的,所以 popen(3) 接受 r+ 参数。来自the manual:
由于
popen()现在是使用双向管道实现的,所以类型 参数可能请求双向数据流。类型参数是 指向以 null 结尾的字符串的指针,该字符串必须是 'r' 才能读取,'w' 用于写作,或 'r+' 用于阅读和写作。
因此,您可能只需从相同的FILE * 读取输出,例如fgets(3)。
【讨论】: