24.02.2013 Aufrufe

Einf ¨uhrung in UNIX - CIS

Einf ¨uhrung in UNIX - CIS

Einf ¨uhrung in UNIX - CIS

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

2.3 Daten <strong>in</strong> Bewegung: Prozesse 39<br />

fend Daten ausgetauscht werden sollen, s<strong>in</strong>d andere Mechanismen vorzuziehen.<br />

2.3.6.2 Pipes<br />

Man kann stdout e<strong>in</strong>es Prozesses mit std<strong>in</strong> e<strong>in</strong>es weiteren Prozesses verb<strong>in</strong>den<br />

und das sogar mehrmals h<strong>in</strong>tere<strong>in</strong>ander. E<strong>in</strong>e solche Konstruktion<br />

wird Pipe 11 , Pipel<strong>in</strong>e oder Fließband genannt und durch den senkrechten<br />

Strich (ASCII-Nr. 124) bezeichnet:<br />

cat filename | more<br />

cat(1) schreibt das File filename <strong>in</strong> e<strong>in</strong>em Stück nach stdout,<br />

more(1) sorgt dafür, daß die Ausgabe nach jeweils e<strong>in</strong>em Bildschirm angehalten<br />

wird. more(1) könnte auf cat(1) verzichten und selbst das File<br />

e<strong>in</strong>lesen (anders als <strong>in</strong> MS-DOS):<br />

more filename<br />

aber <strong>in</strong> Verb<strong>in</strong>dung mit anderen Kommandos wie ls(1) ist die Pipe mit<br />

more(1) als letztem Glied zweckmäßig. Physikalisch ist e<strong>in</strong>e Pipe e<strong>in</strong> Pufferspeicher<br />

im System, <strong>in</strong> den das erste Programm schreibt und aus dem das<br />

folgende Programm liest. Die Pipe ist e<strong>in</strong>e E<strong>in</strong>bahnstraße. Das Pip<strong>in</strong>g <strong>in</strong> e<strong>in</strong>er<br />

Sitzung wird von der Shell geleistet; will man es aus e<strong>in</strong>em eigenen Programm<br />

heraus erzeugen, braucht man den Systemaufruf pipe(2).<br />

2.3.6.3 Named Pipe (FIFO)<br />

Während die eben beschriebene Pipe ke<strong>in</strong>en Namen hat und mit den beteiligten<br />

Prozessen lebt und stirbt, ist die Named Pipe e<strong>in</strong>e selbständige E<strong>in</strong>richtung.<br />

Ihr zweiter Name FIFO bedeutet First In First Out und kennzeichnet<br />

e<strong>in</strong>en Speichertyp, bei dem die zuerst e<strong>in</strong>glagerten Daten auch als erste wieder<br />

herauskommen (im Gegensatz zum Stack, Stapel oder Keller, bei dem die<br />

zuletzt e<strong>in</strong>gelagerten Daten als erste wieder herauskommen). Wir erzeugen<br />

im aktuellen Verzeichnis e<strong>in</strong>e Named Pipe:<br />

mknod mypipe p<br />

(mknod(1M) liegt <strong>in</strong> /b<strong>in</strong>, /sb<strong>in</strong> oder /etc) und überzeugen uns mit<br />

ls -l von ihrer Existenz. Dann können wir mit:<br />

who > mypipe &<br />

cat < mypipe &<br />

unsere Pipe zum Datentransport vom ersten zum zweiten Prozess e<strong>in</strong>setzen.<br />

Die Reihenfolge der Daten ist durch die E<strong>in</strong>gabe festgelegt, beim Auslesen<br />

verschw<strong>in</strong>den die Daten aus der Pipe (ke<strong>in</strong> Kopieren). Die Pipe existiert<br />

vor und nach den beiden Prozessen und ist beliebig weiter verwendbar. Man<br />

wird sie mit rm mypipe wieder los.<br />

11 Auf Vektorrechnern gibt es ebenfalls e<strong>in</strong>e Pipe, die mit der hier beschriebenen<br />

Pipe nichts zu tun hat.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!