2013-09-02 20 views

Odpowiedz

48

jakie są różnice między rurami i gniazdkami oraz kiedy/jak należy wybrać jeden nad drugim?

Obie rury i gniazda obsłużyć strumienie bajtowe, ale robią to w różny sposób ...

  • rury istnieją tylko w określonym hostem i odnoszą się one do buforowania plików pomiędzy wirtualnymi lub podłączenia wyjście/wprowadzanie procesów w tym hoście. W rurach nie ma koncepcji pakietów.
  • gniazda komunikacji pakietowej za pomocą IPv4 lub IPv6; ta komunikacja może wykraczać poza localhost. Zauważ, że różne punkty końcowe gniazda mogą współdzielić ten sam adres IP; muszą jednak słuchać na różnych portach TCP/UDP, aby to zrobić.

Wykorzystanie:

  • Stosować rury:
    • gdy chcesz przeczytać/zapisu danych w postaci pliku w określonym serwerze. Jeśli używasz C, jesteś read() i write() do potoku.
    • gdy chcesz podłączyć wyjście jednego procesu do wejścia innego procesu ... zobacz popen()
  • Użyj gniazda do przesyłania danych pomiędzy różnymi punktami końcowymi IPv4/IPv6. Bardzo często dzieje się tak między różnymi komputerami, ale Gniazda mogą być wykorzystane w ramach tego samego hosta

BTW, można użyć netcat lub socat przyłączyć gniazdo na rurze.

8

Aby ukończyć odpowiedź udzieloną przez Mike'a, należy wspomnieć o istnieniu gniazd domeny UNIX, które są dostępne w każdym systemie operacyjnym zgodnym z POSIX. Chociaż są bardzo podobne do "normalnych" gniazd internetowych pod względem semantyki użycia, są one czysto lokalne dla maszyny (oczywiście gniazda internetowe mogą również działać lokalnie), a zatem prawie zachowują się jak rura. Prawie, ponieważ rura UNIX z definicji jednokierunkowego

Rury FIFO (znane również jako nazwane rurami) zapewniają jednokierunkową międzyprocesową kanał komunikacyjny. Rura ma koniec odczytu i koniec zapisu. Dane zapisane na końcu zapisu rury można odczytać z końca rury. (Wyciąg z man page pipe(7))

gniazd domeny UNIX mają także bardzo niezwykłą cechą, ponieważ oprócz danych, umożliwiają one również wysyłanie plików deskryptory: W ten sposób proces nieuprzywilejowany można uzyskać dostępu do pliku, którego deskryptor została wysłana przez gniazdo. Ta technika, zgodnie z Wikipedią, jest używana przez demona skanowania antywirusowego ClamAV.