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

最近我发现了一个对我来说很新的问题,我很感激建议.我正在使用termios函数在Linux上进行串行通信.我实际上不使用真正的串口,而是使用虚拟小工具串口驱动程序/ dev / ttyGS0.文件描述符作为非阻塞打开.

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

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

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

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

解决方法:

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

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

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

标签:linux,serial-port,embedded-linux

来源: https://codeday.me/bug/20190704/1372024.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值