GNU/Linux >> Belajar Linux >  >> Linux

Linux bernama soket howto

File soket Unix/Linux pada dasarnya adalah FIFO dua arah. Karena soket pada awalnya dibuat sebagai cara untuk mengelola komunikasi jaringan, dimungkinkan untuk memanipulasinya menggunakan send() dan recv() panggilan sistem. Namun, dalam semangat Unix "semuanya adalah file", Anda juga dapat menggunakan write() dan read() . Anda perlu menggunakan socketpair() atau socket() untuk membuat soket bernama. Tutorial untuk menggunakan soket di C dapat ditemukan di sini:Beej's Guide to Unix IPC:Unix Sockets.

socat utilitas baris perintah berguna saat Anda ingin bermain-main dengan soket tanpa menulis program "nyata". Mirip dengan netcat dan bertindak sebagai adaptor antara berbagai jaringan dan antarmuka file.

Tautan:

  • socat rumah proyek
  • Pengantar socat
  • Artikel menarik tentang soket Unix dan socat

Buat soket dengan cepat di 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

Atau dengan program C kecil, misalnya, simpan kode berikut ke 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;
}

Kemudian instal gcc, kompilasi, dan 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. Linux – Di Mana Semaphore Bernama Disimpan??

  2. Howto:Pemrograman C dengan Direktori di Linux

  3. Layanan OS Linux 'bernama'

  1. Periksa koneksi terbuka atau tertutup? (dalam C di Linux)

  2. Teknik IPC Linux mana yang digunakan?

  3. Cara menemukan ukuran buffer soket linux

  1. Linux, soket, koneksi non-pemblokiran

  2. Penerusan DNS bersyarat dengan nama di Linux

  3. Soket Unix vs host TCP/IP:port