连续运行任务:写输出缓存?

时间:2014-11-20 20:16:42

标签: bash unix raspberry-pi

我的Raspberry Pi上有一个连续运行的任务,每秒返回一行文本。我用

将它附加到log.txt
command >> log.txt

现在这个log.txt只会批量更新,大约每5分钟更新一次。如何修复它随附的每一个新行更新,因此每秒都会更新?

2 个答案:

答案 0 :(得分:1)

如果command使用printf或其他C库函数而不是原始write系统调用,则输出始终在程序中缓冲。

如果输出到达终端,则它是行缓冲的,因此它会在每个\n之后写入。

但如果它进入文件或管道,缓冲区将会大得多,可能是整个页面,如4096字节。你能改变command的代码吗?

答案 1 :(得分:0)

如果您使用C编程:关闭文件句柄并在任何行后打开它。 不要指望有好的表现。

在某些情况下,如果文件指针未连接到终端,则命令使用输出缓冲。

command | while IFS='' read -r in; do
    echo "$in" >> log.txt
done

这只是猜测,但写入管道可能会关闭缓冲。 你可以在程序配置中关闭缓冲吗?