目标是“锁定”串行设备或其他Linux设备的访问,以确保在使用设备时对设备进行独占式访问。这可以防止两个程序同时打开同一串行设备并“竞争”读取设备中的字节。
建议使用SYSV风格的UUCP设备锁文件,例如 `/var/lock/LCK..ttyS1`。这是 Linux Serial HOWTO: Locking Out Others 推荐的方法,并在Filesystem Hierarchy Standard 中有所记录。它由串行终端程序如 gtkterm、picocom 实现。也有一些库支持这种方式,如
然而,我发现 Debian bug #734086,它说在Linux上,SYSV风格的UUCP设备锁已经被弃用,应该改用
然而,除了Debian bug本身之外,我找不到可靠的文档来源来描述这些SYSV风格的UUCP设备锁的弃用和
我还发现了
建议使用SYSV风格的UUCP设备锁文件,例如 `/var/lock/LCK..ttyS1`。这是 Linux Serial HOWTO: Locking Out Others 推荐的方法,并在Filesystem Hierarchy Standard 中有所记录。它由串行终端程序如 gtkterm、picocom 实现。也有一些库支持这种方式,如
liblockdev
和liblockfile
(尽管这两个库之间的实现细节有所不同)。然而,我发现 Debian bug #734086,它说在Linux上,SYSV风格的UUCP设备锁已经被弃用,应该改用
flock()
推荐的咨询锁。然而,除了Debian bug本身之外,我找不到可靠的文档来源来描述这些SYSV风格的UUCP设备锁的弃用和
flock()
的推荐使用。我还发现了
ioctl(fd, TIOCEXCL)
,它被screen
实用程序用于锁定终端。在Linux中,锁定串口和其他设备的现代“最佳实践”是什么?我们在哪里可以找到描述这一点的最新文档?
flock()
这样的东西来实现串口锁定(两者都是“咨询性的”),所有程序都使用相同的方法非常重要,否则锁定将无法工作。例如,如果一个程序使用UUCP文件锁,另一个程序使用flock()
,那么锁定就无效了,两个程序都可以打开端口。因此,在Linux社区达成共识对于这个实用上重要的问题是非常重要的。 - Craig McQueen