Wiem, że w Linuksie są nazwane gniazda i nazwane potoki (fifo).
W ls -l
, będą wyglądać jak poniżej: (I zostały zmienione nazwy plików, do demonstracji).
prw-r--r-- 1 root root 0 Nov 8 16:31 /tmp/fifo
srwxrwxrwx 1 root root 0 Nov 8 15:54 /tmp/socket
Teraz można utworzyć nazwaną potok za pomocą mkfifo
. Czy istnieje polecenie utworzenia nazwanego gniazda?
Ostatnią opcją byłoby napisanie programu w C, który wywołałby funkcję mknod, ale chciałby wiedzieć, czy istnieje już taka komenda.
Co próbowałem:
Próbowałem wyszukać dowolne opcje mknod i mkfifo, ale nie znalazłem.
UWAGA: Nie mówię o modelu serwer-klient przez Ethernet / sieć. Nazwany plik gniazda będzie używany przez 2 procesy w tym samym systemie.
Odpowiedzi:
Plik gniazda Unix / Linux jest zasadniczo dwukierunkowym FIFO. Ponieważ gniazda zostały pierwotnie utworzone jako sposób zarządzania komunikacją sieciową, można nimi manipulować za pomocą wywołań systemowych
send()
irecv()
. Jednak w uniksowym duchu „wszystko jest plikiem” możesz także używaćwrite()
iread()
. Musisz użyćsocketpair()
lub,socket()
aby utworzyć nazwane gniazda. Samouczek dotyczący korzystania z gniazd w C można znaleźć tutaj: Przewodnik Beej po Unix IPC: Unix Sockets .Narzędzie
socat
wiersza poleceń jest przydatne, gdy chcesz bawić się gniazdami bez pisania „prawdziwego” programu. Jest podobnynetcat
i działa jako adapter między różnymi interfejsami sieciowymi i interfejsami plików.Spinki do mankietów:
socat
projekt domusocat
socat
źródło
socat
. Prawdopodobnie stwórz nienazwane gniazdo, powiąż je z localhost: some_port, a następnie użyj socat z tym portem?socat
pomocą polecenia UNIX-LISTEN, zobaczman socat
lub ten podręcznik HTMLf1
:socat UNIX-LISTEN:f1 LISTEN:f2
.!!
(socat 1.x) lub%
(socat 2.x), pisząc nazwany potok po lewej stronie i czytając nazwany potok po prawej stronie. np.socat 'PIPE:/tmp/outstream!!PIPE:/tmp/instream' UNIX-CONNECT:/tmp/mysocket
Utwórz szybko gniazdo w pythonie:
Lub za pomocą małego programu C , np. Zapisz następujące elementy w
create-a-socket.c
:Następnie zainstaluj gcc, skompiluj go i ta-da:
źródło
Nie ma narzędzia linii poleceń do tworzenia gniazd, ponieważ gniazdo jest zawsze łączone z serwerem, który obsługuje żądania wysłane do tego gniazda.
Będziesz musiał napisać serwer i pozwolić temu stworzyć gniazdo. Oto samouczek .
źródło
bind()
połączenie"/home/beej/mysocket"