Как создать linux fifo «трубу» (или что-то), которая не блокирует писателя и читателя? - PullRequest
1 голос
/ 04 октября 2011

Я создал трубу fifo

$ mkfifo pipename

Теперь, если я что-то напишу в нее, команда не вернется,

$ echo "foo" > pipename

, пока я не прочту:

$ cat < pipename 
foo

Кроме того, команда чтения также не вернется, пока что-то не будет записано в нее.

Теперь я хотел бы создать такую ​​вещь (на самом деле, возможно, эту вещь не следует рассматривать какбыть каналом, скорее своего рода буфером, который

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

Спасибо

1 Ответ

1 голос
/ 04 октября 2011

Используйте fifo, но напишите свой собственный читатель и писатель.Откройте fifo с установленным O_NONBLOCK, и открытие немедленно вернется, если другой процесс не откроет другую сторону.Ваша команда записи вернется немедленно (в соответствии с запросом), но данные будут потеряны.Если вы хотите, чтобы данные сохранялись, используйте обычный файл.

...