GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Howto für benannte Linux-Sockets

Eine Unix/Linux-Socket-Datei ist im Grunde ein Zwei-Wege-FIFO. Da Sockets ursprünglich zur Verwaltung der Netzwerkkommunikation erstellt wurden, ist es möglich, sie mit send() zu manipulieren und recv() Systemaufrufe. Im Unix-Gedanken „alles ist eine Datei“ können Sie jedoch auch write() verwenden und read() . Sie müssen socketpair() verwenden oder socket() um benannte Sockets zu erstellen. Ein Tutorial zur Verwendung von Sockets in C finden Sie hier:Beej's Guide to Unix IPC:Unix Sockets.

Die socat Das Befehlszeilenprogramm ist nützlich, wenn Sie mit Sockets herumspielen möchten, ohne ein "echtes" Programm zu schreiben. Es ähnelt netcat und fungiert als Adapter zwischen verschiedenen Netzwerk- und Dateischnittstellen.

Links:

  • socat Projekthaus
  • Eine Einführung in socat
  • Interessanter Artikel über Unix-Sockets und socat

Erstellen Sie schnell einen Socket in Python:

~]# python -c "import socket as s; sock = s.socket(s.AF_UNIX); sock.bind('/tmp/somesocket')"
~]# ll /tmp/somesocket 
srwxr-xr-x. 1 root root 0 Mar  3 19:30 /tmp/somesocket

Oder speichern Sie mit einem winzigen C-Programm z. B. Folgendes in create-a-socket.c :

#include <fcntl.h>
#include <sys/un.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argc, char **argv)
{
    // The following line expects the socket path to be first argument
    char * mysocketpath = argv[1];
    // Alternatively, you could comment that and set it statically:
    //char * mysocketpath = "/tmp/mysock";
    struct sockaddr_un namesock;
    int fd;
    namesock.sun_family = AF_UNIX;
    strncpy(namesock.sun_path, (char *)mysocketpath, sizeof(namesock.sun_path));
    fd = socket(AF_UNIX, SOCK_DGRAM, 0);
    bind(fd, (struct sockaddr *) &namesock, sizeof(struct sockaddr_un));
    close(fd);
    return 0;
}

Dann gcc installieren, kompilieren und ta-da:

~]# gcc -o create-a-socket create-a-socket.c
~]# ./create-a-socket mysock
~]# ll mysock
srwxr-xr-x. 1 root root 0 Mar  3 17:45 mysock

Linux
  1. Howto:C-Programmierung mit Verzeichnissen unter Linux

  2. Linux-Betriebssystemdienst „benannt“

  3. Überprüfen Sie die Verbindung offen oder geschlossen? (in C unter Linux)

  4. Linux-API zum Ermitteln von Sockets, die einem Prozess gehören

  5. Beispiel für die Verwendung benannter Pipes in Linux Bash

Eine Einführung in Pipes und Named Pipes in Linux

So installieren Sie ifconfig unter CentOS 7 Linux

HOWTO:Führen Sie Linux auf Android ohne Root aus

Machen Sie eine https-Anfrage mit Sockets unter Linux

Überprüfen Sie alle im Linux-Betriebssystem geöffneten Sockets

ss - Ausgabeformat des Linux-Socket-Statistikdienstprogramms