stdbuf命令的手册页指出行缓冲模式作为标准输入缓冲选项无效.
这是什么原因?
tail -f access.log | stdbuf -iL cut -d' ' -f1 | uniq
stdbuf: line buffering stdin is meaningless
Try `stdbuf --help' for more information.
解决方法:
简化后,stdbuf是stdio功能的包装器.输入流的行缓冲在stdio中是未定义的;我找不到标准文件说明它意味着什么,所以就标准而言,它几乎毫无意义.
假设行为类似于stdout行缓冲,stdin的行缓冲需要为每个字符读取调用一次read(),因为没有其他方法可以保证您不会读取描述符上的换行符.由于缓冲的目的是减少系统调用的数量,因此stdio库不实现这一点并不令人惊讶.