PDF-Version - freiesMagazin
PDF-Version - freiesMagazin
PDF-Version - freiesMagazin
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