Это простой эхо-сервер в Unix, использующий nc:
mkfifo fifo
cat fifo | nc -k -l 4458 -v | cat >fifo
(основываясь на этом )
Насколько я понимаю, поток данных работает следующим образом:
fifo (my named pipe)
|
| (using cat)
|
v
nc
|
| (using cat)
|
v
fifo
И вот вопрос: почему это не работает?
nc -k -l 4458 -v >fifo <fifo
Вы заметите , что если вы пытаетесь , telnet
чтобы localhost
на 4458
вы получите «Connection отказался» сообщение об ошибке.
cat myfifo | nc -k -l 4458 > myfifo
тоже работает. Если вы используете текстовый файл, file.txt как иnc -k -l 4458 < file.txt > file.txt
первое соединение будет подключаться и близко (имеет смысл , так как вход был усечен и EOF закрывает сокет), то второе соединение будет забывчивый сервер эхо: оно отзовется любой другой линии и сохраните unchoed строки в текстовый файл.Ответы:
Это потому, что команда netcat еще даже не запущена! Оболочка при попытке открыть fifo для ввода заблокируется. Пытаться
и ты ничего не увидишь. Вместо этого используйте, например,
который открывает fifo для чтения и записи как stdin, а затем переводит его в стандартный вывод.
Трассировка команды full bash показывает, что ни open для чтения, ни запись не возвращаются (пока не будет выполнено противоположное открытие):
источник