如果我以 os.open( '/dev/ttyS2', O_RDWR | O_NDELAY )
打开文件,有什么方法可以检查我的 'write()' 命令何时完成?或者,我可以打开一个文件进行非阻塞读取但阻塞写入吗?
最佳答案
你对非阻塞的含义有误解。它不暗示异步操作 - 您可以有异步/同步和阻塞/非阻塞的任意组合。
write()
只是将数据交给内核处理。当 write()
成功返回时,内核现在已经处理了数据 - 无论文件描述符是阻塞还是非阻塞都是如此。此时内核是否真的完成了写入是另一回事(通常,答案是否定的——大多数文件描述符是异步的)。
如果内核没有更多空间来缓冲您要写入的数据,则 write()
无法完成,这种情况受非阻塞与阻塞的影响 - 在阻塞中在这种情况下,write()
将阻塞直到空间可用。在非阻塞情况下,write()
将返回一个错误 (EAGAIN
),您可以稍后重试。
如果您希望等到写入终端设备的所有数据都实际发送到硬件,请使用 tcdrain()
- 但这可能是不必要的。或者,如果您希望 write()
阻塞直到您的数据被内核接受,那么您可以使用 fcntl()
临时将文件描述符设置为阻塞。
关于python - 检查何时使用非阻塞打开发送所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3858238/