3

我正在编写一个用于运行程序的实用程序,我需要从程序中捕获无缓冲的标准输出和标准错误。我需要:

  • 将 stdout 和 stderr 捕获到单独的文件中。
  • 输出不需要缓冲(或行缓冲)。
  • 无需修改正在运行的程序的源代码。

问题是,当管道输出到文件时,stdout 流变成块缓冲而不是行缓冲。如果程序崩溃,输出永远不会被刷新,并且是空白的。所以我需要在没有缓冲(或使用行缓冲)的情况下捕获标准输出。

我认为这可以用 pty 来完成,但我很难找到任何完全符合我要求的示例(大多数忽略 stderr)。事实上,我不确定我是否在 C 中找到了任何 pty 示例。大多数使用更高级别的接口,如 Python 的 pty 和 subprocess 模块。

任何人都可以提供帮助(使用代码片段或链接)吗?任何帮助,将不胜感激。

编辑:我想我已经解决了。以下两个链接非常有帮助。

我的代码可用作存储库:

4

1 回答 1

2

man 7 pty


尤其是:

Unix 98 伪终端

通过调用打开未使用的 Unix 98 伪终端主机 posix_openpt(3)。(此函数打开主克隆设备, /dev/ptmx请参见pts(4)。)在执行任何程序特定的初始化,使用更改从设备的所有权和权限grantpt(3),并使用解锁从设备之后unlockpt(3),可以通过传递名称打开相应的从设备由 ptsname(3)调用返回open(2)

现在您知道了此类代码需要调用的库函数的名称,您可以做两件有用的事情:

  • 查找他们的手册页
  • 谷歌示例代码。由于您知道在搜索引擎中使用哪些关键字,我怀疑您会更幸运地找到示例。
于 2009-10-11T19:01:48.097 回答