【发布时间】:2018-08-01 14:52:10
【问题描述】:
管道缓冲区大小可以在 c 中使用fcntl() 设置。可以直接从 shell 脚本完成吗?
【问题讨论】:
-
@Andreas, ...您能否为该问题提供一些额外的上下文,以便更好地确定它是否是实际上是重复的?
-
@CharlesDuffy 尝试使用文件以最简单的方式通过握手来产生同步脉冲,这可用于控制应用程序的帧速率。昨天在 SO 上找到了一种方法(现在找不到,大声笑)提到
stdbuf来控制 stdio 缓冲,然后我推断tail可用于弥合从 stdio 到命名管道的差距;stdbuf -o0 tail -f my_sync_fifo。stdbuf几乎可以满足我的要求。 -
既然如此,听起来您的问题不在于内容被卡在管道中,而是在 libc 中缓冲(实际上,人们更经常感到惊讶)。无论如何,关于是否将问题作为一个骗子来结束 - 虽然目前提出的这个问题不太适用于您的用例,但它可以给出一个明确且正确的答案一个愿意包含一点 C 的人,所以我很想把它打开。
-
@CharlesDuffy 是的,零也是一个大小,不是吗? :-) 你会说
stdbuf和tail组合是问题的答案吗?如果没有,为什么不呢? (作为记录,我自己的研究表明,最通用的解决方案是为当前用例编写一个微型 C 程序,因为在 shell 中制作同步脉冲很棘手)