我们制作的设备可以在各种 POSIX 兼容系统上显示为 USB 串行端口。我支持一个 API,它允许调用者检索我们设备可用的所有当前可用(即未使用、具有正确权限等)实例的列表。呼叫者还可以获得一个列表,其中还指示了正在使用的设备。
当然,最简单的方法是尝试打开/关闭每个候选串行端口并注意哪些是可以打开的。我不希望这样做,因为使用此 API 的多个应用程序(这将是其应用程序中的库 / dylib)可能会产生竞争条件,它们都尝试同时查询相同的串行端口,这将导致一个应用程序错误地认为该设备正在使用中。
所以我需要的是一种在不实际打开端口的情况下知道端口是否可以打开的方法。我见过其他人使用锁定文件方案,其中创建了一个特殊文件来指示端口正在使用中 - 假设如果文件不存在,则端口可用。我的问题是,除了我的图书馆之外,可能还有其他端口的用户不遵守这样的方案,所以我不能依赖它。
是否有一些低级的 POSIX 功能可以让我在这方面查询文件的状态,而无需实际尝试打开它?