2017-02-16 84 views
8

我在man cat(GNU/Linux)中遇到過這個問題。
該手冊只是說-u (ignored)沒有解釋爲什麼。
出於好奇,我在谷歌搜索,但似乎沒有人問過這個。
然後我看着catother implementations。我注意到 蘋果的貓也實現了這個選項在源代碼中說cat命令中「-u」選項的用法是什麼?

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

我猜這個選項意思是'無緩衝'。這個選項的主要用途是什麼?爲什麼它在那裏,爲什麼忽略?我認爲這一定是有原因的。

+1

如果您正在尋找有關該選件實際使用情況的信息,那麼您可能在SuperUser或Unix和Linux堆棧交換網站上運行得更多,而不是SO。 – AntonH

+0

[也許看到'setbuf'確實會幫助](http://en.cppreference.com/w/c/io/setbuf)。 – WhozCraig

+0

我想這意味着'無緩衝' – hek2mgl

回答

6

選項-u禁用緩衝到stdout

GNU文檔閱讀:標準輸出

使用非緩衝I/O。沒有這個選項,Posix不會指定行爲。

這可能表示cat的當前默認行爲是在沒有緩衝的情況下輸出的。

4

它是Unix/Linux的POSIX兼容選項。 GNU cat自動執行該操作,因此無法將其關閉。指定時,它被接受但被忽略,因爲它對行爲沒有影響。

更多細節cat(1):從輸入文件到標準輸出

-u寫字節無延遲,因爲每個被讀取。

7

背後cat -u的想法的確是輸出應該是無緩衝,這樣即使cat是在管道,將數據及時,因爲它讀取已寫入。

當你使用cat -u "[email protected]" | …時,它可能很重要,而輸入實際上來自鍵盤。

的機會是GNU cat有效地工作無緩衝(使用直接read()write()調用),所以-u選項是不相關的 - 它始終工作在「非緩衝模式」。

9

the POSIX standard for cat

提要

cat [-u] [file...] 

...

選項

...

以下選項應支持:從輸入文件到標準輸出

-u 寫字節無延遲,因爲每個被讀取。

這可以通過禁用輸出緩衝來實現。

2

-u選項對從FIFOs進行非阻塞讀取的原型設計有價值。意圖是 支持下列序列:

mkfifo FOO>
貓-u FOO>的/ dev/tty13 &
貓-u> FOO

它是未指定的標準輸出是否是或未在 默認情況下緩衝。當標準輸出與終端相關聯時,這個 有時很有用,因爲緩衝可能會延遲輸出。 -u選項的存在保證了未緩衝的I/O是 可用。如果沒有指定-u 選項,則實施定義cat實用程序是否緩衝輸出。傳統上,-u選項使用IEEE Std 1003.1-2001的System Interfaces卷中定義的setvbuf()函數的等效 實現。

相關問題