我正在编写一个用于运行程序的实用程序,我需要从程序中捕获无缓冲的标准输出和标准错误。我需要:
- 将 stdout 和 stderr 捕获到单独的文件中。
- 输出不需要缓冲(或行缓冲)。
- 无需修改正在运行的程序的源代码。
问题是,当管道输出到文件时,stdout 流变成块缓冲而不是行缓冲。如果程序崩溃,输出永远不会被刷新,并且是空白的。所以我需要在没有缓冲(或使用行缓冲)的情况下捕获标准输出。
我认为这可以用 pty 来完成,但我很难找到任何完全符合我要求的示例(大多数忽略 stderr)。事实上,我不确定我是否在 C 中找到了任何 pty 示例。大多数使用更高级别的接口,如 Python 的 pty 和 subprocess 模块。
任何人都可以提供帮助(使用代码片段或链接)吗?任何帮助,将不胜感激。
编辑:我想我已经解决了。以下两个链接非常有帮助。
- http://publib.boulder.ibm.com/infocenter/zos/v1r10/index.jsp?topic=/com.ibm.zos.r10.bpxbd00/posixopenpt.htm
- http://www.gidforums.com/t-3369.html
我的代码可用作存储库: