我在man cat
(GNU / Linux)中遇到过这个问题
手册只是说-u (ignored)
而没有解释原因
出于好奇,我在Google上搜索过,但似乎没有人问过这个问题
然后我查看cat
的{{3}}
我注意到
Apple的cat也实现了这个选项(见other implementations)。在源代码中它说
...
case 'u':
setbuf(stdout, NULL);
break;
...
我猜这个选项意味着'无缓冲'。这个选项的使用是什么?它为什么存在,为什么被忽略?我认为必须有一些原因。
答案 0 :(得分:9)
<强>概要强>
cat [-u] [file...]
...
选项强>
...
应支持以下选项:
<强> -u 强> 在读取每个字节时,无延迟地将输入文件中的字节写入标准输出。
这可以通过禁用输出缓冲来实现。
答案 1 :(得分:7)
选项-u
禁用缓冲到stdout
。
GNU文档内容如下:
对stdout使用无缓冲的I / O.如果没有此选项,Posix不会指定行为。
这可能表示cat
的当前默认行为是在没有缓冲的情况下输出。
答案 2 :(得分:7)
cat -u
背后的想法确实是输出应该是无缓冲的,因此即使cat
在管道中,数据也会在读取时立即写入。
当您使用cat -u "$@" | …
并且输入实际上是来自键盘时,这很重要。
GNU cat
可能无需缓冲(使用直接read()
和write()
调用)即可有效运行,因此-u
选项无关紧要 - 它始终适用于'无缓冲模式'。
答案 3 :(得分:4)
它是Unix / Linux的POSIX兼容选项。
GNU cat
自动执行此操作,无法将其关闭。指定时,它被接受但被忽略,因为它对行为没有影响。
更多详情cat(1)
:
-u
在读取每个字节时,将输入文件中的字节无延迟地写入标准输出。
答案 4 :(得分:3)
-u
选项在对来自FIFOs
的非阻塞读取进行原型设计时具有价值。意图是
支持以下顺序:
mkfifo foo&gt;
cat -u foo&gt; / dev / tty13&amp;
cat -u&gt; FOO未指定标准输出是否缓冲 默认情况。这个 当标准输出与终端相关时,有时会感兴趣,因为缓冲区 - ing可能会延迟输出。 -u选项的存在可确保无缓冲的I / O. 可用。如果-u是cat实用程序缓冲输出,则是实现定义的 未指定选项。传统上,-u选项使用等效实现 IEEE Std 1003.1-2001的系统接口卷中定义的setvbuf()函数。