gpt4 book ai didi

linux - linux 中串行端口描述符 block 上的“关闭”功能

转载 作者:IT王子 更新时间:2023-10-29 00:36:23 26 4
gpt4 key购买 nike

最近我发现了一个对我来说很新的问题,非常感谢您的建议。我正在使用 termios 函数在 Linux 上进行串行通信。我其实用的不是真正的串口,而是虚拟的gadget串口驱动/dev/ttyGS0。文件描述符以非阻塞方式打开。

我的程序定期生成数据并将其发送到/dev/ttyGS0。没有信息,如果另一端读取它。如果没有,一些内部 fifo 会填满并写入返回“会阻塞”错误。到目前为止一切顺利,我对此没有任何问题。

问题是,当我想关闭这种带有填充的 fifo 的文件描述符时,关闭函数 block !不是无限期地,而是大约 10 秒钟。

我尝试在关闭前执行 tcflush(uart->fd, TCOFLUSH) 但没有任何效果。

这对我来说太奇怪了,我没有找到任何描述,关闭可能会阻止。有什么办法可以避免这种情况吗?或者至少减少这个超时?我应该在哪里寻找这个超时? VTIME 属性对此也没有影响。

最佳答案

正如 Amardeep 提到的,close() 调用由驱动程序处理。 Close 本身始终是阻塞调用,但通常速度很快。

因此,答案是延迟特定于虚拟小工具驱动程序。我没有这方面的经验可以提供帮助。

关闭文件有多重要?如果延迟是一个主要问题并且需要关闭文件(例如避免长时间运行的进程中的文件描述符泄漏),那么关闭可能需要在单独的线程中调用。显然,最好的答案是针对该驱动程序的;也许那里的研究可能会得出答案,例如清除虚拟设备状态的 ioctl() 调用。

关于linux - linux 中串行端口描述符 block 上的“关闭”功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14255314/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com