Eu sei que existem soquetes e pipes nomeados (fifo) no Linux.
Em ls -l
, eles teriam a seguinte aparência: (alterei os nomes dos arquivos para demonstração.)
prw-r--r-- 1 root root 0 Nov 8 16:31 /tmp/fifo
srwxrwxrwx 1 root root 0 Nov 8 15:54 /tmp/socket
Agora, um pipe nomeado pode ser criado usando mkfifo
. Existe um comando para criar um soquete nomeado?
A última opção seria escrever um programa em C, que chamaria a função mknod, mas queria saber se já existe um comando para isso.
O que tentei:
tentei procurar por qualquer opção para o mknod & mkfifo, mas não consegui encontrar uma.
NOTA: Não estou discutindo sobre o modelo servidor-cliente pela Ethernet / rede. O arquivo de soquete nomeado será usado por 2 processos no mesmo sistema.
Respostas:
Um arquivo de soquete Unix / Linux é basicamente um FIFO bidirecional. Como os soquetes foram criados originalmente como uma maneira de gerenciar as comunicações de rede, é possível manipulá-los usando as chamadas
send()
e dorecv()
sistema. No entanto, no espírito Unix de "tudo é um arquivo", você também pode usarwrite()
eread()
. Você precisa usarsocketpair()
ousocket()
criar soquetes nomeados. Um tutorial para usar soquetes em C pode ser encontrado aqui: Guia do Beej para Unix IPC: Unix Sockets .O
socat
utilitário de linha de comando é útil quando você deseja brincar com soquetes sem escrever um programa "real". É semelhantenetcat
e atua como um adaptador entre diferentes redes e interfaces de arquivos.Ligações:
socat
casa do projetosocat
socat
fonte
socat
. Provavelmente, crie um soquete sem nome, vincule-o ao localhost: some_port e use socat com essa porta?socat
o comando UNIX-LISTEN, consulteman socat
ou este manual HTMLf1
:socat UNIX-LISTEN:f1 LISTEN:f2
.!!
(socat 1.x) ou%
(socat 2.x), com o pipe nomeado de escrita à esquerda e o pipe nomeado de leitura à direita. por exemplosocat 'PIPE:/tmp/outstream!!PIPE:/tmp/instream' UNIX-CONNECT:/tmp/mysocket
Crie um soquete rapidamente em python:
Ou com um pequeno programa C , por exemplo, salve o seguinte em
create-a-socket.c
:Em seguida, instale o gcc, compile-o e faça o seguinte:
fonte
Não há ferramenta de linha de comando para criar soquetes, pois um soquete sempre está conectado a um servidor que lida com as solicitações enviadas a esse soquete.
Então você terá que escrever um servidor e deixar isso criar o soquete. Aqui está um tutorial .
fonte
bind()
para se conectar"/home/beej/mysocket"