【问题标题】:How to save the tty without a buffer?如何在没有缓冲区的情况下保存 tty?
【发布时间】:2011-06-01 12:50:04
【问题描述】:

我遇到了缓冲区问题:

我有一个守护进程 D,它的监视器 M。 D 在 M 之前启动,M 将任何相关信息打印到 tty,我需要将这些信息解析并交给我自己的程序。

由于我想自动执行此操作,因此 M 应该打印到文件中。但它直到守护进程被杀死,因为缓冲区。

所以我正在考虑记录 tty,因此尝试使用脚本将输出记录到终端但是......它也被缓冲了......

我还尝试访问 gnu coreutils(以使用我显然需要的 stdbuf),但是当我无法安装该实用程序以解压缩 GNU 网站上提出的特殊 .xz 格式时不得不放弃!

我担心我什至没有做正确的事! 对于这个问题,难道没有一个简单的解决方案,可能每个使用实时工作的人都有过吗??

我们将不胜感激。谢谢。

【问题讨论】:

    标签: bash stdout unbuffered-output


    【解决方案1】:
    1. .xz 文件格式可以用xz7zip 提取
    2. 似乎也有一个 LD_PRELOAD hack 来实现相同的结果:http://lists.gnu.org/archive/html/bug-coreutils/2008-11/msg00164.html

    此页面是我对 stdio 缓冲的首选参考:http://www.pixelbeat.org/programming/stdio_buffering/

    PS。 “每个使用实时工作的人”大概都使用 IPC 并且不依赖 bash。 Perl、python 和显然所有低级语言都提供了显式禁用/启用缓冲的方法

    【讨论】:

    • 嗨sehe,实际上让我头疼的不是.xz,而是解压缩它的实用程序(xz ...)未能安装在我的机器上。但是我回到存储库并找到了一个很好的打包的 .tar.gz。我已经看到了您提供给我的两个链接(或等价物),但无法理解如何将其应用于我的问题。不过,我会重新阅读它们。
    • 好的,所以我设法安装了stdbuf,这正是我所需要的!我使用 stdbuf -oL 作为我的守护进程及其监视器的前缀。我想我仍然错过了实际录音的一部分(1 行),但这不是重要的信息,所以我暂时认为已经完成。感谢您的指导,重新阅读了 pixelbeat 页面,我终于明白了为什么涉及 libc,并且 stdbuf 技巧工作得非常好;)编辑:stdbuf 是基于您提到的 LD_PRELOAD hack。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 2018-12-06
    • 2011-03-02
    相关资源
    最近更新 更多