无法写入命名管道

tay*_*10r 14 linux bash named-pipes

我正在尝试写一个用mkfifo制作的命名管道.但是当我运行命令(ex)时ls > myNamedPipe,我无法再将命令输入bash.我仍然可以写字符,这就是它.

mic*_*yer 21

命名管道保持打开状态,直到您从其他位置读取它.这是为了允许不同进程之间的通信.

尝试:

mkfifo fifo
echo "foo" > fifo
Run Code Online (Sandbox Code Playgroud)

然后打开另一个终端并键入:

cat fifo
Run Code Online (Sandbox Code Playgroud)

如果您返回第一个终端,您会注意到现在可以输入其他命令.

另请参见相反的情况:

# terminal 1
cat fifo

# terminal 2
echo "foo" > fifo

# and now you can see "foo" on terminal 1
Run Code Online (Sandbox Code Playgroud)

如果您希望终端在尝试向fifo写入内容时不要"挂起",请将fifo附加到文件描述符:

mkfifo fifo
exec 3<> fifo
echo "foo" > fifo
echo "bar" > fifo
Run Code Online (Sandbox Code Playgroud)

  • 将fifo附加到文件描述符会导致shell缓冲写入fifo的数据.没有它,任何写入fifo块都会写入内容.使用文件描述符,shell会缓存"foo"和"bar",从该文件描述符读取的任何内容都可以在以后读取. (5认同)