0

我有一个程序在计算机运行时始终运行。它通过 USB 设备与串行接口连接。有时,当计算机打开时,设备可能不存在。

我的问题是确认设备文件何时出现的好方法。我可以创建一个无限循环来持续检查文件,假设我知道它的名称将是什么,然后在它获得 fd 时中断。但是还有比这更好的方法吗?

此外,假设在程序运行时设备被拔掉,我的 fd 现在变得无效。发生这种情况时是否会引发一些事件或错误,以便我可以再次开始检查,直到设备文件再次出现?

我使用选择循环从 fd 读取。

4

2 回答 2

2

在 Linux 上,您的应用程序可以通过使用udev.

举一个很好的例子,看看这个通知器:udev-notify

libudev API将允许您侦听内核事件,并在设备可用或设备被移除时收到通知,然后您可以决定何时发生此类事件。

于 2011-06-23T16:56:37.810 回答
0

从历史上看,轮询的解决方案(确定所述“文件”是否以某个时间间隔存在的循环)将是“最好的”解决方案。如果您使用的是现代 Linux(2.6.12+,但您没有指定),您可以使用inotify,它可能完全符合您的要求——监视目录以创建文件 (IN_CREATE)。我链接到的维基百科文章提供了非常好的概述和有用的链接。

它被拔掉的部分很棘手。当一个文件在 *nix 中被删除时(可以追溯到很久以前),它的文件描述符仍然有效。因此,我猜这extern int errno;可能是您的解决方案;您的帖子被标记为“C”,因此没有什么可以“抛出”的,但是如果您在read(或其他)呼叫失败时检查这一点,您可以获得洞察力。

另请查看libudev,它当然更特定于设备,而不是*nix 的一般“一切都是文件”理念。

于 2011-06-23T16:49:18.243 回答