我正在编写一个用于运行程序的实用程序,我需要从程序中捕获无缓冲的stdout和stderr。我需要:
问题是,当将输出传递给文件时,stdout流变为块缓冲而不是行缓冲。如果程序崩溃,则输出永远不会被刷新,并且是空白的。所以我需要在没有缓冲(或使用行缓冲)的情况下捕获stdout。
我认为这可以用pty完成,但是我很难找到任何完全符合我想要的例子(大多数忽略stderr)。事实上,我不确定我在C中找到了任何pty例子;大多数人使用更高级别的界面,如Python的pty和子流程模块。
任何人都可以提供帮助(使用代码段或链接)吗?任何帮助将不胜感激。
编辑:我想我已经解决了。以下两个链接非常有用。我的代码可以作为存储库使用:
答案 0 :(得分:2)
man 7 pty
特别是:
Unix 98伪终端
通过调用打开未使用的Unix 98伪终端主机
posix_openpt(3)
。 (此功能打开主克隆设备,/dev/ptmx
;请参阅pts(4)
。)执行任何特定于程序的初始化后, 更改从属设备的所有权和权限 使用grantpt(3)
,并使用unlockpt(3)
解锁奴隶,相应的 可以通过传递返回的名称来打开从属设备ptsname(3)
致电open(2)
。
现在您知道了这些代码需要调用的库函数的名称,您可以做两件有用的事情: