我目前正在使用VxWorks中的一个应用程序,该应用程序使用read()
函数与设备文件对话,并使用一组ioctl()
来配置通信端口。有时会发生read()
永远停留,因为它等待消息,但永远不会收到消息。然后永远不会达到以下ioctl(fd,FIOCANCEL,0)
。
我的问题是如何将select()
与FIOCANCEL结合使用以正确断开连接,以便以后可以再次执行read()
。
如果可能的话,我也想知道FIOCANCEL的实施,我可以修改它。
答案 0 :(得分:0)
select()
与任何其他POSIX平台上的select相同(虽然我不记得它是否像Linux一样修改了超时参数; POSIX说这两种行为都没问题)。
据说你在谈论串口?然后,在select()
的调用中包含该内容应该没问题。然后你不需要ioctl(fd,FIOCANCEL,0),因为如果read()
表明确实有东西要读,你只会打电话给select()
。如果select()
超时,请不要致电read()
。