Znalazłem kilka odpowiedzi, ale wydaje się, że dotyczą one w szczególności komputerów z systemem Windows. Moje pytanie brzmi: jakie są różnice między rurami i gniazdkami, a kiedy/jak należy wybrać jedno nad drugim?Jaka jest różnica między rurami i gniazdkami?
Odpowiedz
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()
iwrite()
do potoku. - gdy chcesz podłączyć wyjście jednego procesu do wejścia innego procesu ... zobacz popen()
- gdy chcesz przeczytać/zapisu danych w postaci pliku w określonym serwerze. Jeśli używasz C, jesteś
- 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.
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.