Wie lange bleiben FIFOs (Named Pipes) offen?

5

Zum Beispiel habe ich ein Skript, das die Zeit in eine Pipe in / etc / pipe schreibt. Es schreibt kontinuierlich in einer while-True-Schleife. Wie lange stehen die Daten in der Pipe zum Lesen zur Verfügung? Wenn ich mich nur entscheide, die Pipe einen Tag später mit cat / etc / pipe zu lesen, erhalte ich dann alle Zeitwerte ab dem Zeitpunkt, an dem ich mit dem Schreiben begonnen habe?

Umgekehrt, was ist, wenn meine Schleife nur alle 10 Minuten die Zeit schrieb. Kann ich einen Tag später auf alles zugreifen?

Stellen Sie sich zum Schluss vor, dass meine Schleife die Zeit kontinuierlich schreibt (wie in meinem ersten Beispiel) und ich die Pipe alle 30 Minuten lese. Wenn mein Computer kurz vor dem Lesen der Pipe heruntergefahren wird, ist die Pipe beim Neustart leer oder enthält sie alle diese Daten?

n0pe
quelle

Antworten:

7

Der Prozess kann PIPE_BUFBytes (siehe linux/limits.h) in die Pipe schreiben . Dann bleibt es hängen, bis ein Teil der Daten gelesen wird.

Die gepufferten Daten bleiben so lange erhalten, wie mindestens ein Ende der Pipe offen ist - es gibt kein "Timeout" oder ähnliches. Puffer werden jedoch im Speicher gehalten und Neustarts werden nicht fortgesetzt.

pipe(7)Weitere Informationen finden Sie auf der Handbuchseite, insbesondere im Abschnitt "Rohrkapazität".

Ein Rohr hat eine begrenzte Kapazität. Wenn die Pipe voll ist, write(2)blockiert oder schlägt ein fehl, je nachdem, ob das Flag O_NONBLOCK gesetzt ist (siehe unten).

[...] Seit Linux 2.6.11 beträgt die Pipe-Kapazität 65536 Bytes.

Lass mich sein
quelle
1
Kann dieser Wert sicher geändert werden?
Nr.
@MaxMackie Es sollte eine Konstante sein.
Let_Me_Be
Ich habe das verstanden, ich meinte, es gibt eine spezielle Möglichkeit, es zu ändern, ohne andere Probleme mit anderen Programmen zu haben. Und ist es gefährlich, den Wert auf eine sehr hohe Konstante zu setzen?
Nr.
1
@MaxMackie Ich denke, Sie könnten eine spezielle Version des Kernels aus modifizierten Quellen kompilieren.
Let_Me_Be