Was ist die Option "-u" im Befehl cat? [geschlossen]

8

Ich bin in man cat (GNU / Linux) auf dieses Problem gestoßen.
Das Handbuch sagt einfach -u (ignored) ohne zu erklären warum.
Aus Neugierde habe ich auf Google gesucht, aber es scheint niemand zuvor gefragt zu haben.
Dann sah ich andere Implementierungen von cat .
Ich bemerkte Apples Katze implementiert auch diese Option (siehe cat.c ). Im Quellcode heißt es

%Vor%

Ich denke, diese Option bedeutet "ungepuffert". Was ist der Zweck dieser Option? Warum ist es da und warum wird es ignoriert? Ich denke, dafür muss es einen Grund geben.

    
navigaid 16.02.2017, 16:40
quelle

5 Antworten

9

Pro der POSIX-Standard für cat :

  

SYNOPSIS

%Vor%      

...

     

OPTIONEN

     

...

     

Die folgende Option soll unterstützt werden:

     

-u   Schreiben Sie Bytes aus der Eingabedatei ohne Verzögerung in die Standardausgabe, wenn sie gelesen werden.

Dies könnte durch Deaktivieren der Pufferung der Ausgabe implementiert werden.

    
Andrew Henle 16.02.2017 16:48
quelle
7

Die Idee hinter cat -u ist in der Tat, dass die Ausgabe ungepuffert sein sollte, selbst wenn cat befindet sich in einer Pipeline, die Daten werden sofort beim Lesen geschrieben.

Es kann von Bedeutung sein, wenn Sie cat -u "$@" | … verwenden und die Eingabe tatsächlich von einer Tastatur kommt.

Die Wahrscheinlichkeit ist, dass GNU cat effektiv ohne Pufferung funktioniert (mit direkten read() und write() Rufe), also ist die -u Option irrelevant - sie funktioniert immer im 'ungepufferten Modus'.

    
Jonathan Leffler 16.02.2017 16:48
quelle
6

Option -u deaktiviert die Pufferung auf stdout .

Die GNU-Dokumentation lautet:

  

Verwenden Sie ungepufferte E / A für stdout. Posix gibt das Verhalten ohne diese Option nicht an.

, was möglicherweise darauf hinweist, dass das aktuelle Standardverhalten von cat ohne Pufferung ausgegeben werden soll.

    
Pejman 16.02.2017 16:47
quelle
4

Es ist eine POSIX-kompatible Option für Unix / Linux. GNU cat macht das automatisch und es gibt keine Möglichkeit, es auszuschalten. Wenn es angegeben wird, wird es akzeptiert, aber ignoriert, da es keine Auswirkung auf das Verhalten hat.

Weitere Details cat(1) :

  

-u Schreiben Sie Bytes aus der Eingabedatei ohne Verzögerung in die Standardausgabe, wenn sie gelesen werden.

    
Seek Addo 16.02.2017 16:47
quelle
2

Die Option -u hat einen Wert beim Prototyping nicht blockierender Lesevorgänge von FIFOs . Die Absicht ist es        unterstütze die folgende Sequenz:

  

mkfifo foo & gt;    Katze -u foo & gt; / dev / tty13 & amp;    Katze -u & gt; foo

     

Es ist nicht spezifiziert, ob die Standardausgabe in der Datenbank gepuffert ist oder nicht   Standardfall. Dies          ist manchmal von Interesse, wenn die Standardausgabe einem Terminal zugeordnet ist, da          kann die Ausgabe verzögern. Das Vorhandensein der Option -u garantiert, dass ungepufferte E / A ist          verfügbar. Es ist implementation-defined, ob das Cat-Dienstprogramm die Ausgabe puffert, wenn die Option -u          Option ist nicht angegeben. Traditionell wird die Option -u mit dem Äquivalent implementiert          der setvbuf () - Funktion, die im Systemschnittstellen-Volume von IEEE Std 1003.1-2001 definiert ist.

    
Ishvar Patel 16.02.2017 18:15
quelle

Tags und Links