27.10.2013 Aufrufe

PDF-Version - freiesMagazin

PDF-Version - freiesMagazin

PDF-Version - freiesMagazin

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Es ist in C++ mit der richtigen Bibliothek [19] sogar<br />

möglich, aus einem gegebenen Kanal das<br />

zugehörige stream-Objekt zu bestimmen, daher<br />

entspricht der Codeschnipsel<br />

fdostream output(8);<br />

output &5<br />

identisch zu<br />

$ date >/dev/fd/5<br />

und<br />

$ echo message >/dev/tcp/host/port<br />

schickt eine Nachricht an einen Port eines bestimmten<br />

Hosts, z. B. einer Internetadresse. Die<br />

Shell kümmert sich dabei automatisch um den<br />

Verbindungsaufbau, Datenübertragung und abschließenden<br />

Verbindungsabbau. Man beachte,<br />

dass schon der Ordner tcp gar nicht existiert,<br />

man also den größten Teil des Pfades manuell,<br />

d. h. ohne Autovervollständigung, eingeben<br />

muss [20].<br />

Zum Testen kann man dafür die Netcat-<br />

Programme verwenden, die über das Paket<br />

nmap installiert werden.<br />

$ nc -l 5555<br />

startet einen Server, der nun auf eine eingehende<br />

Verbindungen wartet, während<br />

$ cat >/dev/tcp/localhost /5555<br />

in einer anderen Konsole desselben Rechners<br />

eine Nachricht an diesen sendet. Oder von ihm<br />

empfängt:<br />

$ read /dev/tcp/localhost /5555<br />

auf Seiten des Clients. Da TCP nach erfolgreichem<br />

Verbindungsaufbau nicht mehr zwischen<br />

Server und Client unterscheidet, sind statt > auch<br />

die spitzen Klammern < oder gar möglich. Nun<br />

ist die Verbindung an Dateideskriptor 4 gebunden<br />

und es können beliebig viele Daten ausgetauscht<br />

werden; beendet wird erst mit<br />

$ exec 4>&-<br />

Statt TCP ist auch UDP als Protokoll möglich.<br />

Dateien offenhalten<br />

Generell werden mit Handles also Schreib- und<br />

Lesezugriffe von Prozessen auf gewisse Datenströme<br />

– meistens eben Dateien – offen gehalten.<br />

TERMINAL<br />

Als letzte Verdeutlichung betrachte man noch<br />

den Löschbefehl [21]. rm ist von allen Befehlen<br />

unter Unix sicherlich einer der erstaunlichsten:<br />

Vielen mag bekannt sein, dass Dateien nicht vollständig<br />

gelöscht, sondern der Einfachheit halber<br />

nur aus dem Dateisystem entfernt werden, der<br />

eigentliche Inhalt wird bei späteren Schreibzugriffen<br />

zufällig überschrieben. Viel interessanter<br />

ist aber das Verhalten bei Dateien, auf die noch<br />

ein Deskriptor gesetzt ist: Zunächst wird dann<br />

nur der Verzeichniseintrag gelöscht, der belegte<br />

Speicherplatz wird aber vom Betriebssystem erst<br />

freigegeben, wenn der Deskriptor geschlossen<br />

wird. Bis dahin können die Daten noch ausgelesen<br />

werden. Dieses Verhalten macht sich beispielsweise<br />

dadurch bemerkbar, dass man eine<br />

Mediendatei noch abspielen kann, obwohl sie bereits<br />

verschoben oder gar gelöscht ist.<br />

Möchte man eine Datei einlesen, verarbeiten und<br />

unter demselben Namen abspeichern, lässt sich<br />

dieser Effekt geschickt einsetzen. Ein<br />

$ infos<br />

wird wahrscheinlich scheitern, da infos vor der<br />

Prozessausführung vom Schreibvorgang geleert<br />

wird. Stattdessen könnte man verwenden:<br />

$ exec 3

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!