cat命令中"-u"选项的用途是什么?

nav*_*aid 10 c unix linux cat

我在man cat(GNU/Linux)中遇到过这个问题.
手册只是说-u (ignored)没有解释原因.
出于好奇,我在谷歌搜索,但似乎没有人问过这个.
然后我看着其他实现cat.
我注意到Apple的cat也实现了这个选项(参见cat.c).在它的源代码中说

...
case 'u':
    setbuf(stdout, NULL);
    break;
...
Run Code Online (Sandbox Code Playgroud)

我想这个选项意味着'无缓冲'.这个选项的使用是什么?它为什么存在,为什么被忽略?我认为必须有一些原因.

And*_*nle 9

根据POSIX标准cat:

概要

cat [-u] [file...]
Run Code Online (Sandbox Code Playgroud)

...

OPTIONS

...

应支持以下选项:

-u 在读取每个字节时,无延迟地将输入文件中的字节写入标准输出.

这可以通过禁用输出缓冲来实现.


Pej*_*man 7

选项-u禁用缓冲stdout.

GNU文档如下:

对stdout使用无缓冲的I/O. 如果没有此选项,Posix不会指定行为.

这可能表明当前的默认行为cat是在没有缓冲的情况下输出.


See*_*ddo 7

它是 Unix/Linux 的 POSIX 兼容选项。GNUcat会自动执行此操作,并且无法将其关闭。当指定时,它被接受但被忽略,因为它对行为没有影响。

更多详情cat(1)

-u 在读取每个字节时,将字节从输入文件立即写入标准输出。


Jon*_*ler 7

背后的想法cat -u确实是输出应该是无缓冲的,因此即使cat在管道中,数据也会在读取时立即写入.

它在你使用时很重要cat -u "$@" | …,输入实际上来自键盘.

很有可能GNU在cat没有缓冲(使用直接read()write()调用)的情况下有效地工作,因此该-u选项无关紧要 - 它总是在"无缓冲模式"下工作.