stdbuf 命令的手册页指出行缓冲模式作为标准输入缓冲选项是无效的。这是什么原因呢?
tail -f access.log | stdbuf -iL cut -d' ' -f1 | uniq
stdbuf: line buffering stdin is meaningless
Try `stdbuf --help' for more information.
答案1
作为 stdbuf 的作者,让我引导您访问“stdio 输入缓冲问题”部分:http://www.pixelbeat.org/programming/stdio_buffering/
答案2
简单来说,stdbuf 是 stdio 功能的包装器。 stdio 中未定义输入流的行缓冲;我找不到任何标准文档说明其含义,因此就标准而言,它实际上毫无意义。
假设行为类似于 stdout 行缓冲,stdin 的行缓冲需要为每个读取的字符调用一次 read() ,因为没有其他方法可以保证您不会读取描述符上的换行符。由于缓冲的目的是减少系统调用的数量,因此 stdio 库没有实现这一点也就不足为奇了。