为什么open()永不返回?

我在Fedora环境中操作,使用C代码打开USB端口以与串行设备进行通讯。

在大多数情况下,我的程序运行良好。但是,作为测试的一部分,我定期打开终端窗口并运行screen命令,然后手动将命令发送到串行设备。那也很好,但是之后,c程序将无法再访问该端口。我用ctrl-a k或ctrl-a d以及适当的sudo kill -9关闭了屏幕实例。之后,似乎没有证据表明该屏幕实例(sudo lsof / dev / tty *没有显示“屏幕”),但是,运行我的c程序失败。据我所知,open(...)命令只是挂起。恢复连接的唯一方法是拔下USB电缆并将其重新插入设备。

所以,

1)是否有比我一直使用的两个更好的方法来关闭“屏幕”实例? 2)为什么“开放”不返回?

评论