Почему mkfifo ведет себя как LIFO?

Вопрос, которому отвечают, с помощью xinput является правильным, но здесь является быстрым, если все, что Вы ищете, является простой блокировкой типа экранной заставки. Я записал обратно это в 90-х и все, что это делает, едят события клавиатуры X-сервера и события от нажатия мыши, пока Вы не вводите пароль. Никакая обратная связь вообще кроме выхода, когда Вы вводите его правильно.

http://ishiboo.com/~danny/Projects/xl/

Я использую его в качестве экранной блокировки, точно как Вы хотите использовать его.

7
04.11.2012, 01:29
1 ответ

В

echo 'one' > /tmp/a

Оболочка делает open(O_WRONLY) на канале и затем мечет икру echo который затем делает write("one\n").

open заблокируется, пока некоторый другой процесс не открывает канал в RD_ONLY или RD_WR все же.

И - также open от Вашего echo two.

Таким образом, в данный момент Вы делаете more /tmp/a у Вас есть два процесса, готовые стрелять, которые не открыли FIFO еще уже не говоря о записанном ничто к нему. Какой из тех двух будет запланирован как только more делает open(RD_ONLY) будет случайным.

Чтобы постараться не блокироваться, Вы могли сделать:

exec 3<>  /tmp/a

чтобы разблокировать канал сначала и затем выполнить Ваши команды, которые не заблокируются, до, канал полон.

Обратите внимание однако, что вышеупомянутое будет работать над Linux, но не над каждым Unix или подобный Unix. Поведение при открытии канала в режиме чтения-записи является неуказанным POSIX.

8
27.01.2020, 20:17

Теги

Похожие вопросы