加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux中串口描述符块的’close’功能

发布时间:2020-12-13 22:50:11 所属栏目:Linux 来源:网络整理
导读:最近我发现了一个对我来说很新的问题,我很感激建议.我正在使用termios函数在 Linux上进行串行通信.我实际上不使用真正的串口,而是使用虚拟小工具串口驱动程序/ dev / ttyGS0.文件描述符作为非阻塞打开. 我的程序定期生成数据并将其发送到/ dev / ttyGS0.如果
最近我发现了一个对我来说很新的问题,我很感激建议.我正在使用termios函数在 Linux上进行串行通信.我实际上不使用真正的串口,而是使用虚拟小工具串口驱动程序/ dev / ttyGS0.文件描述符作为非阻塞打开.

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

问题是,当我想用??填充的fifo关闭这样的文件描述符时,关闭功能块!不是无限期,但是大约10秒钟.

我试图在关闭之前做tcflush(uart-> fd,TCOFLUSH)而没有任何影响.

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

解决方法

正如Amardeep所提到的,close()调用由驱动程序处理.关闭本身总是一个阻止调用,但通常它是一个快速的.

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读