1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
.\" This man page is Copyright (C) 1999 Claus Fischer.
.\" Permission is granted to distribute possibly modified copies
.\" of this page provided the header is included verbatim,
.\" and in case of nontrivial modification author and date
.\" of the modification is added to the header.
.\"
.\" 990620 - page created - aeb@cwi.nl
.\"
.\" German translation by Martin Schmitt (martin@schmitt.li) 01/2001
.\"
.TH FIFO 7 "17. Januar 2001" "Linuxhandbuch" "Gerätedateien"
.SH BEZEICHNUNG
fifo \- Spezialdatei, Named Pipe, "first-in first-out"
.SH BESCHREIBUNG
Ein FIFO, auch "Named Pipe" genannt, ist mit einer
Pipe vergleichbar. Er wird jedoch im Unterschied zur Pipe
nicht direkt zum Austausch zwischen Programmen verwendet,
sondern ist als Eintrag im Dateisystem sichtbar.
.PP
Auf den FIFO kann von mehreren Prozessen lesend oder
schreibend zugegriffen werden. Wenn die Prozesse über den
FIFO Daten austauschen, werden die Daten vom Kernel intern
weitergegeben, ohne tatsächlich im Dateisystem gespeichert
zu werden. Der FIFO hält als Datei somit keine Daten.
Der Eintrag im Dateisystem dient als
.IR "benannter Bezugspunkt"
(daher Named Pipe), auf den Prozesse zugreifen können.
.PP
Der Kernel verwaltet genau ein Pipe-Objekt für jeden FIFO,
der von wenigstens einem Prozess zum Lesen oder Schreiben
geöffnet ist. Damit Daten durch den FIFO transportiert
werden können, muss der FIFO von beiden Enden geöffnet sein,
einmal lesend und einmal schreibend. Im Normalfall wird
die Verarbeitung nach dem Öffnen des FIFO so lange
blockiert, bis auch das andere Ende geöffnet ist.
.PP
Ein FIFO kann vom Prozess auch non-blocking geöffnet werden.
Das Öffnen des FIFO zum Lesen funktioniert dann auch, wenn
er noch von keinem anderen Prozess zum Schreiben geöffnet
wurde. Das Öffnen zum Schreiben bricht mit ENXIO (Datei oder
Adresse nicht gefunden) ab, wenn nicht bereits ein anderer
Prozess den FIFO zum Lesen geöffnet hat.
.PP
Unter LINUX können FIFOs sowohl lesend als auch schreibend
in beiden Modi, blocking und non-blocking, geöffnet werden.
Gemäß POSIX ist dafür kein Verfahren definiert. Dadurch kann
ein FIFO zum Schreiben geöffnet werden, ohne dass lesende Prozesse
vorhanden sind. Falls ein Prozess beide Seiten eines FIFO öffnet,
um mit sich selbst zu kommunizieren, sollte darauf geachtet
werden, dass es nicht zu Stockungen in der Kommunikation kommt.
.SH ANMERKUNGEN
Versucht ein Prozess in einen FIFO zu schreiben, der nicht von
anderer Seite zum Lesen geöffnet ist, erhält er vom Kernel das
Signal SIGPIPE.
FIFOs werden mit
.BR mkfifo (3)
angelegt
und können mit
.IR "ls -l"
oder
.IR file
identifiziert werden.
.SH "SIEHE AUCH"
.BR mkfifo (3),
.BR mkfifo (1),
.BR pipe (2),
.BR socketpair (2),
.BR open (2),
.BR signal (2),
.BR sigaction (2).
|