Я знаю, что в Linux есть именованные сокеты и именованные каналы (fifo).
В ls -l
, они будут выглядеть как показано ниже: (Я изменил имена файлов, для демонстрации.)
prw-r--r-- 1 root root 0 Nov 8 16:31 /tmp/fifo
srwxrwxrwx 1 root root 0 Nov 8 15:54 /tmp/socket
Теперь именованный канал может быть создан с помощью mkfifo
. Есть ли команда для создания именованного сокета?
Последний вариант - написать программу на C, которая будет вызывать функцию mknod, но хотела бы знать, есть ли уже команда для этого.
Что я пробовал:
я пытался найти какие-либо параметры для mknod & mkfifo, но не смог найти.
ПРИМЕЧАНИЕ. Я не обсуждаю модель сервер-клиент по сети Ethernet. Именованный файл сокета будет использоваться двумя процессами в одной системе.
Ответы:
Файл сокетов Unix / Linux - это, по сути, двусторонний FIFO. Поскольку сокеты изначально были созданы как способ для управления сетевыми соединениями, можно манипулировать ими с помощью
send()
иrecv()
системных вызовов. Тем не менее, в духе Unix «все является файлом», вы также можете использоватьwrite()
иread()
. Вам нужно использоватьsocketpair()
илиsocket()
для создания именованных сокетов. Руководство по использованию сокетов в C можно найти здесь: Руководство Beej по Unix IPC: Unix Sockets .socat
Утилита командной строки полезно , если вы хотите играть с розетками без написания «реальной» программы. Он похожnetcat
и действует как адаптер между различными сетевыми и файловыми интерфейсами.Ссылки:
socat
проект домаsocat
socat
источник
socat
. Возможно, создайте неназванный сокет, свяжите его с localhost: some_port и затем используйте socat с этим портом?socat
помощью команды UNIX-LISTEN, см.man socat
Или это руководство по HTMLf1
:socat UNIX-LISTEN:f1 LISTEN:f2
.!!
(socat 1.x) или%
(socat 2.x), с написанием именованного канала слева и чтением именованного канала справа. напримерsocat 'PIPE:/tmp/outstream!!PIPE:/tmp/instream' UNIX-CONNECT:/tmp/mysocket
Создайте сокет быстро в Python:
Или с крошечной C-программой , например, сохраните следующее в
create-a-socket.c
:Затем установите gcc, скомпилируйте его и выполните команду ta-da:
источник
Нет инструмента командной строки для создания сокетов, так как сокет всегда подключен к серверу, который обрабатывает запросы, отправленные на этот сокет.
Так что вам придется написать сервер и позволить этому создать сокет. Вот учебник .
источник
bind()
подключение к"/home/beej/mysocket"