Linux中对串口描述符块的关闭函数 [英] 'close' function on serial port descriptor blocks in linux

查看:0
本文介绍了Linux中对串口描述符块的关闭函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

我的程序定期生成数据并将其发送到/dev/ttyGS0。如果另一端读或不读,都没有信息。如果不是这样,一些内部FIFO就会被填满,并且写返回会被"阻塞"错误。到目前为止,我对此没有任何问题。

问题是,当我想用填充的FIFO关闭这样的文件描述符时,关闭函数块!不是无限期的,但大约10秒。

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

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

推荐答案

如前所述,Close()调用由驱动程序处理。Close本身始终是一个阻塞调用,但通常它是一个快速调用。

因此,答案是延迟特定于虚拟小工具驱动程序。我对那件事没有经验可以帮忙。

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

这篇关于Linux中对串口描述符块的关闭函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆