File io 是否有POSIX方法可以确定文件(串行端口)是否可以在不打开的情况下打开?

File io 是否有POSIX方法可以确定文件(串行端口)是否可以在不打开的情况下打开?,file-io,serial-port,posix,file-in-use,File Io,Serial Port,Posix,File In Use,我们制造了一种设备,可以在各种POSIX兼容系统上显示为USB串行端口。我支持一个API,它允许调用者检索当前所有可用设备实例的列表(即未使用、拥有正确权限等)。调用者还可以获得一个列表,其中还指示了正在使用的设备 当然,实现这一点的简单方法就是尝试打开/关闭每个候选串行端口,并记下哪些端口是可打开的。我不希望这样做,因为使用此API的多个应用程序(在其应用程序中可能是库/动态库)可能会创建竞态条件,在竞态条件下,它们都试图同时查询相同的串行端口,这将导致一个应用程序错误地认为设备正在使用 所以

我们制造了一种设备,可以在各种POSIX兼容系统上显示为USB串行端口。我支持一个API,它允许调用者检索当前所有可用设备实例的列表(即未使用、拥有正确权限等)。调用者还可以获得一个列表,其中还指示了正在使用的设备

当然,实现这一点的简单方法就是尝试打开/关闭每个候选串行端口,并记下哪些端口是可打开的。我不希望这样做,因为使用此API的多个应用程序(在其应用程序中可能是库/动态库)可能会创建竞态条件,在竞态条件下,它们都试图同时查询相同的串行端口,这将导致一个应用程序错误地认为设备正在使用

所以我需要的是一种知道端口是可打开的,而不需要实际打开它的方法。我见过其他人使用锁定文件方案,其中创建了一个特殊文件来指示端口正在使用中——假设如果文件不存在,则端口可用。我的问题是,除了我的库之外,端口的其他用户可能不遵守这样的方案,所以我不能依赖它

是否有一些低级POSIX功能允许我在这方面查询文件的状态,而不实际尝试打开它