在VxWorks中关闭无响应设备文件端口的正确方法是啥?
Posted
技术标签:
【中文标题】在VxWorks中关闭无响应设备文件端口的正确方法是啥?【英文标题】:What is the proper way of closing the port of a non-responding device file in VxWorks?在VxWorks中关闭无响应设备文件端口的正确方法是什么? 【发布时间】:2018-02-12 20:29:13 【问题描述】:我目前正在开发 VxWorks 中的一个应用程序,它使用read()
函数与设备文件通信,并使用一组ioctl()
来配置通信端口。 read()
有时会因为等待消息而永远卡住,但从未收到消息。然后将永远无法联系到以下ioctl(fd,FIOCANCEL,0)
。
我的问题是如何将select()
与 FIOCANCEL 结合使用以正确断开连接,以便以后可以再次执行read()
。
如果可能的话,我也想知道FIOCANCEL的实现,这样我可以修改它。
【问题讨论】:
【参考方案1】:VxWorks 上的select()
与任何其他 POSIX 平台上的 select 相同(尽管我不记得它是否像 Linux 那样修改了超时参数;POSIX 说这两种行为都很好)。
大概你在谈论一个串行端口?那么这应该可以包含在对select()
的调用中。然后,您将不需要 ioctl(fd, FIOCANCEL, 0),因为如果 select()
表明确实有要阅读的内容,您只会调用 read()
。如果select()
超时,请不要调用read()
。
【讨论】:
以上是关于在VxWorks中关闭无响应设备文件端口的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
VxWorks 6.9 内核编程指导之读书笔记 -- ISRs和Watchdog Timer