下面的shell程序示例使这个问题更加清楚。
给定一个简单的字符设备(在我的情况下是 ftdi ttyUSB 设备),我向该echo
设备发送一个请求,然后使用 读取设备的open();write();close();
答案,使用两个不同的过程(和)。cat
open();read();close();
/bin/echo
/bin/cat
- 以下工作:
$ /bin/echo -ne $request > /dev/ttyUSB0 ; /bin/cat -e < /dev/ttyUSB0 M-^?^B^@^C
- 以下操作无效:
$ /bin/echo -ne $request > /dev/ttyUSB0 ; sleep 2s ; /bin/cat -e < /dev/ttyUSB0 cat does not read anything
- 另一个工作示例:
$ /bin/cat -e < /dev/ttyUSB0 & sleep 2s ; /bin/echo -ne $request > /dev/ttyUSB0 M-^?^B^@^C
发生了什么2
?为什么行为不同?数据去哪儿了?
答案1
数据实际上无处可去。没有人在听它,所以它被丢弃了。确切的机制取决于硬件,但通常第一次打开设备会清除硬件中的任何接收缓冲区,尽管不能保证这些缓冲区是否已启用。