Ich weiß, dass es unter Linux Sockets und Named Pipes (FIFO) gibt.
In ls -l
würden sie wie folgt aussehen: (Ich habe die Dateinamen zu Demonstrationszwecken geändert.)
prw-r--r-- 1 root root 0 Nov 8 16:31 /tmp/fifo
srwxrwxrwx 1 root root 0 Nov 8 15:54 /tmp/socket
Nun kann mit eine Named Pipe erzeugt werden mkfifo
. Gibt es einen Befehl zum Erstellen eines benannten Sockets?
Die letzte Möglichkeit wäre, ein C-Programm zu schreiben, das die Funktion mknod aufruft, aber wissen möchte, ob es dafür bereits einen Befehl gibt.
Was ich versucht habe:
Ich habe versucht, nach Optionen für mknod & mkfifo zu suchen, konnte aber keine finden.
HINWEIS: Ich spreche nicht über das Server-Client-Modell über Ethernet / Netzwerk. Die angegebene Socket-Datei wird von 2 Prozessen auf demselben System verwendet.
Antworten:
Eine Unix / Linux-Socket-Datei ist im Grunde ein Zwei-Wege-FIFO. Da Sockets ursprünglich zur Verwaltung der Netzwerkkommunikation erstellt wurden, können sie mit den Systemaufrufen
send()
undrecv()
bearbeitet werden. Im Unix-Geist von „Alles ist eine Datei“ können Sie jedoch auchwrite()
und verwendenread()
. Sie müssen benannte Sockets verwendensocketpair()
odersocket()
erstellen. Ein Tutorial zur Verwendung von Sockets in C finden Sie hier: Beejs Handbuch zu Unix IPC: Unix-Sockets .Das
socat
Befehlszeilenprogramm ist nützlich, wenn Sie mit Sockets herumspielen möchten, ohne ein "echtes" Programm zu schreiben. Es ähneltnetcat
und fungiert als Adapter zwischen verschiedenen Netzwerk- und Dateischnittstellen.Links:
socat
Projekt nach Hausesocat
socat
quelle
socat
. Erstellen Sie wahrscheinlich einen Socket ohne Namen, binden Sie ihn an localhost: some_port und verwenden Sie dann socat für diesen Port.socat
mit dem Befehl UNIX-LISTEN (sieheman socat
oder dieses HTML-Handbuchf1
:socat UNIX-LISTEN:f1 LISTEN:f2
.!!
Named Pipes mit (socat 1.x) oder%
(socat 2.x), wobei der Schriftzug Named Pipes links und der Schriftzug Named Pipes rechts steht. zBsocat 'PIPE:/tmp/outstream!!PIPE:/tmp/instream' UNIX-CONNECT:/tmp/mysocket
Erstellen Sie schnell einen Socket in Python:
Oder speichern Sie mit einem winzigen C-Programm beispielsweise Folgendes
create-a-socket.c
:Dann installiere gcc, kompiliere es und ta-da:
quelle
Es gibt kein Befehlszeilentool zum Erstellen von Sockets, da ein Socket immer mit einem Server verbunden ist, der die an diesen Socket gesendeten Anforderungen verarbeitet.
Sie müssen also einen Server schreiben und diesen den Socket erstellen lassen. Hier ist ein Tutorial .
quelle
bind()
Verbindung zu"/home/beej/mysocket"