7

是否有等效fflush()于 shell 命令的 C 函数?

echo "kkkk"
flush <<< are there some command to execute to flush stdout?
4

2 回答 2

-1

简短的回答:不需要对 shell 脚本执行显式刷新。所有 shell 输出(通过 echo)都没有缓冲。输出立即发送到输出设备。如果将输出通过管道传输到另一个程序中,则情况会更加复杂,该程序可能会缓冲它的输出。

长答案:考虑

(echo aaa ; sleep 3  ; echo bbb)

它将显示“aaa”,延迟 3 秒后显示“bbb” - 因为管道构造将导致 C 程序使用缓冲输出。

如上所述,如果输出(通过管道)发送到将缓冲输出的程序,则第一行可能会延迟,并与第二行同时显示(延迟 3 秒后)。解决方案是在管道中的其他程序上强制“行缓冲”(或不缓冲)。

例如,给定一个简单的“C”程序将标准输入复制到标准输出:

int main() { char b[256] ; while (fgets(b, sizeof(b), stdin) ) fputs(b, stdout) };

并运行

(echo aaa ; sleep 3 ; echo bbb  ) | a.out | cat

将导致在 a.out 中缓冲,延迟 3 秒后显示 'aaa' 和 'bbb'。

于 2019-09-21T06:27:44.550 回答
-2

不,你永远不需要它。

当一个程序(例如echo)退出时,所有输出数据都会自动刷新。如果程序还没有退出,那么刷新是内部问题,与 shell 无关。

于 2013-07-08T14:59:11.677 回答