即使设备未被任何进程打开,设备 IO 也会处理吗?

即使设备未被任何进程打开,设备 IO 也会处理吗?

下面的shell程序示例使这个问题更加清楚。

给定一个简单的字符设备(在我的情况下是 ftdi ttyUSB 设备),我向该echo设备发送一个请求,然后使用 读取设备的open();write();close();答案,使用两个不同的过程(和)。catopen();read();close();/bin/echo/bin/cat

  1. 以下工作:
$ /bin/echo -ne $request > /dev/ttyUSB0 ; /bin/cat -e < /dev/ttyUSB0 
M-^?^B^@^C
  1. 以下操作无效:
$ /bin/echo -ne $request > /dev/ttyUSB0 ; sleep 2s ; /bin/cat -e < /dev/ttyUSB0 
cat does not read anything
  1. 另一个工作示例:
$ /bin/cat -e < /dev/ttyUSB0 & sleep 2s ; /bin/echo -ne $request > /dev/ttyUSB0
M-^?^B^@^C

发生了什么2?为什么行为不同?数据去哪儿了?

答案1

数据实际上无处可去。没有人在听它,所以它被丢弃了。确切的机制取决于硬件,但通常第一次打开设备会清除硬件中的任何接收缓冲区,尽管不能保证这些缓冲区是否已启用。

相关内容