我使用创建管道
mkfifo /tmp/foo.pipe
Run Code Online (Sandbox Code Playgroud)
现在,我想尝试从管道读取最多2秒,所以我执行
read -t 2 line < /tmp/foo.pipe
Run Code Online (Sandbox Code Playgroud)
超时不会发生.读只是坐在那里等待管道的输入.
手册说'read'应该与命名管道一起使用.有谁知道为什么会这样?
ls -al /tmp/foo.pipe
prw-r----- 1 foo bar 0 Jun 22 19:06 /tmp/foo.pipe
Run Code Online (Sandbox Code Playgroud)
MZS*_*MZS 18
在调用read builtin之前,你的shell在open()调用时被阻塞了.
在Linux上,您可以同时打开FIFO进行读写操作,以防止打开时阻塞; 这是不可移植的,但可以做你想要的.
read -t 2 <>/tmp/foo.pipe
Run Code Online (Sandbox Code Playgroud)
改编自:带有非阻塞读取的Bash脚本
归档时间: |
|
查看次数: |
4159 次 |
最近记录: |