【发布时间】:2015-05-19 04:22:54
【问题描述】:
目标是“锁定”对串行设备或其他 Linux 设备的访问,以确保在设备正在使用时对其进行独占访问。例如,这可以防止两个程序同时打开同一个串行设备并“竞争”从该设备读取字节。
建议使用 SYSV 样式的 UUCP 设备锁定文件,例如 /var/lock/LCK..ttyS1。这就是Linux Serial HOTWO: Locking Out Others 所推荐的。它也记录在Filesystem Heirarchy Standard 中。由 gtkterm、picocom 等串口终端程序实现。有诸如 liblockdev 和 liblockfile 之类的库来支持这一点(尽管这两个库的实现细节不同)。
但是,我发现 Debian bug #734086,它说在 Linux 上,不推荐使用 SYSV 样式的 UUCP 设备锁,而应该使用 flock() 咨询锁。
但是,除了 Debian 错误本身之外,我找不到可靠的文档来源来描述这些 SYSV 样式 UUCP 设备锁的弃用以及flock() 的推荐。
我还发现了ioctl(fd, TIOCEXCL),screen 实用程序使用它来锁定终端。
在 Linux 中锁定串行端口和其他设备的现代“最佳实践”是什么?我们在哪里可以找到描述此内容的最新文档?
【问题讨论】:
-
我看到由于“主要基于意见”而吸引了密切的投票。但是,要使串行端口锁定使用 UUCP 锁定文件或
flock()(两者都是“建议”)之类的东西起作用,所有程序都使用相同的方法很重要,否则锁定将不起作用。例如。如果一个程序使用UUCP文件锁,而另一个程序使用flock(),则锁定无效,两者都可以打开端口。所以这是一个在 Linux 社区中达成共识的务实重要问题。
标签: linux serial-port locking