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