Artificial intelligent assistant

Why mkfifo behaves like a LIFO? If i do. mkfifo /tmp/a echo 'one'>/tmp/a in the while from another terminal echo 'two'>/tmp/a and from a third terminal more /tmp/a Why i obtain as output of the last command this? two one

In


echo 'one' > /tmp/a


The shell does an `open(O_WRONLY)` on the pipe and then spawns `echo` which then does the `write("one\
")`.

The `open` will block until some other process opens the pipe in `RD_ONLY` or `RD_WR` though.

And so will the `open` from your `echo two`.

So at the moment you do `more /tmp/a` you've got two processes ready to fire that have not opened the fifo yet let alone written anything to it. Which of those two will be scheduled as soon as `more` does the `open(RD_ONLY)` is going to be random.

To avoid blocking, you could do:


exec 3<> /tmp/a


to unlock the pipe first, and then run your commands which won't block until the pipe is full.

Note however that the above will work on Linux but not on every Unix or Unix-like. The behaviour when opening a pipe in read-write mode is unspecified by POSIX.

xcX3v84RxoQ-4GxG32940ukFUIEgYdPy ec1e17abb1f853b0fd400bdb05328209