2016-12-09 2 views
1

В системе Unix я просто знал, что мы можем использовать файл FIFO для связи между двумя процессами, и я тестировал его с помощью проектов C.Как писать сообщения в FIFO и читать их из другого процесса одновременно

Теперь мне интересно, если мы можем сделать что-то вроде этого:

  • Открыть два терминала.
  • Используйте его для записи сообщений в FIFO и используйте другие другие, чтобы прочитать его.
  • Когда я положил что-то в FIFO на первом терминале, второй терминал отобразит его немедленно.

Я пробовал следующее, но это не сработало. На одном терминале:

mkfifo fifo.file 
echo "hello world" > fifo.file 

На другом терминале:

cat fifo.file 

Теперь я могу видеть "hello world". Тем не менее, оба процесса завершаются немедленно, и я не могу продолжать печатать/читать fifo.file.

+0

Какое сообщение об ошибке? – golimar

ответ

0

От info mkfifo:

После того, как вы создали специальный файл FIFO таким способом, любой процесс может открыть его для чтения или записи, так же, как обычный файл. Тем не менее, это должно быть открыто с обоих концов одновременно, прежде чем вы сможете выполнять любые операции ввода или вывода на нем. Открытие FIFO для чтения обычно блокируется, пока какой-либо другой процесс не откроет тот же FIFO для записи и наоборот.

Таким образом, вы должны открыть файл для чтения в одном процессе (терминал):

cat fifo.file 

И открыть файл для записи в другом процессе (терминал):

echo 'hello' > fifo.file 

cat в пример выше останавливает чтение из файла, когда происходит конец файла (вход). Если вы хотите, чтобы продолжить чтение из файла, используйте tail -F команду, например:

tail -F fifo.file 

Если вы хотите писать и одновременно передавать строки в другой конец трубы, используйте cat следующим образом:

cat > fifo.file 

Строки будут отправляться на другой конец трубы по мере ввода. Press Ctrl - D прекратить писать.

+0

Спасибо. Он работает сейчас! Не могли бы вы снова прочитать мой вопрос, потому что у меня новый вопрос. – Yves

Смежные вопросы