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

时间:2017-02-16 16:40:30

标签: c linux unix cat

我在man cat(GNU / Linux)中遇到过这个问题 手册只是说-u (ignored)而没有解释原因 出于好奇,我在Google上搜索过,但似乎没有人问过这个问题 然后我查看cat的{​​{3}} 我注意到 Apple的cat也实现了这个选项(见other implementations)。在源代码中它说

...
case 'u':
    setbuf(stdout, NULL);
    break;
...

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

5 个答案:

答案 0 :(得分:9)

the POSIX standard for cat

  

<强>概要

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()函数。