2013-09-02 8 views

Antwort

48

Was sind die Unterschiede zwischen Rohren und Steckdosen, und wann/wie sollten Sie sich für eines entscheiden?

Rohrleitungen und Steckdosen verarbeiten Bytestreams, aber sie tun es auf unterschiedliche Weise ...

  • Rohre existieren nur innerhalb eines bestimmten Host, und sie beziehen sich auf Pufferung zwischen virtuellen Dateien oder die Verbindungs Ausgabe/Eingabe von Prozessen innerhalb dieses Hosts. Es gibt keine Konzepte von Paketen in Pipes.
  • Sockets paketieren die Kommunikation mit IPv4 oder IPv6; Diese Kommunikation kann sich über localhost hinaus erstrecken. Beachten Sie, dass verschiedene Endpunkte eines Sockets dieselbe IP-Adresse verwenden können. Sie müssen jedoch unterschiedliche TCP/UDP-Ports abhören.

Nutzungs:

  • Verwendung Rohren:
    • , wenn Sie wollen als Datei in einem bestimmten Server/Schreib-Daten zu lesen. Wenn Sie C verwenden, können Sie read() und write() an eine Pipe.
    • wenn Sie die Ausgabe eines Prozesses mit dem Eingang eines anderen Prozesses verbinden möchten ... siehe popen()
  • Verwenden Buchsen Daten zwischen verschiedenen IPv4/IPv6-Endpunkten zu senden. Sehr oft geschieht dies zwischen verschiedenen Hosts, aber Steckdosen innerhalb der gleichen Host

BTW verwendet werden könnten, Sie netcat oder socat zu verbinden, um eine Buchse an ein Rohr verwenden können.

8

Um die Antwort von Mike zu vervollständigen, ist es wichtig, die Existenz von UNIX Domain Sockets zu erwähnen, die auf jedem POSIX-kompatiblen Betriebssystem verfügbar sind. Obwohl sie in Bezug auf die Verwendungssemantik den "normalen" Internet-Sockets sehr ähnlich sind, sind sie rein lokal für die Maschine (natürlich können Internet-Sockets auch lokal arbeiten) und verhalten sich daher fast wie eine Pipe. Fast, weil ein UNIX-Pipe definitions unidirektional:

Rohre und FIFOs (auch als named pipes bekannt) einen unidirektionale Interprozesskommunikationskanal. Ein Rohr hat ein Leseende und ein Schreiben Ende. Daten, die auf das Schreibende einer Pipe geschrieben werden, können aus dem gelesenen Ende der Pipe gelesen werden. (Auszug aus dem man page pipe(7))

UNIX Domain Sockets auch eine sehr ungewöhnliche Eigenschaft haben, da neben Daten, sie erlauben auch Filedeskriptoren Senden: Mit dieser Art und Weise, ein unprivilegierten Prozess eine beliebige Datei zugreifen können, deren Descriptor gesendet wurde über den Sockel. Diese Technik wird laut Wikipedia vom ClamAV Antivirus Scanning Daemon verwendet.

Verwandte Themen