- 论坛徽章:
- 1
|
我开始对于fifo的期待是,例如,我写入100个字节,此时写端阻塞,等待读取端进程完全读完了以后,写端才返回。
但是我做了一个实验,发现还是不是这样的。
1. 首先我创建了一个fifo
$mkfifo hfifo.txt
2. 然后有一个my.txt文件,分成好几行:
$cat my.txt
line1
line2
line3
line4
3. 我打开一个终端tty1去写入hfifo.txt这个fifo:
cat my.txt >hfifo.txt
4. 打开另一个终端tty2,去读取一行:
$read l1<hfifo.txt
在执行命令的瞬间,tty1那边的cat命令也结束了,在tty2里面echo $l1显示line1而不是文件的全部内容。
我的疑问是: 既然tty里面的cat命令是要把整个文件的内容喂给hfifo.txt这个fifo,那么为什么读端读了一行,就结束了呢? 我期待读端下次可以继续read l2<hfifo.txt来读取"line2"这一样,而tty1要一直等到所有写入的数据都被读取了,才结束返回。
为什么系统的行为是这样的。fifo难道其中一端返回了,另一端就立刻返回吗? 我可以写一个bash脚本来调用read命令循环读取该fifo的内容,它不应该在我第一次read之后就退出啊。
关键问题是,
1. 写端如何知道读端读完一行以后就立刻返回了?
2. 读端出了一次性cat所有的内容以外,不能逐行,分步骤的读取吗? shell编程可以做到吗?
还请指点迷津。
|
|