在Linux中锁定串行端口和其他设备的最佳实践是什么? [英] What is the best practice for locking serial ports and other devices in Linux?

查看:92
本文介绍了在Linux中锁定串行端口和其他设备的最佳实践是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

目标是锁定"对串行设备或其他Linux设备的访问,以确保在使用中对该设备的独占访问.例如,这可以防止两个程序同时打开同一串行设备并竞争"以从该设备读取字节.

The goal is to "lock" access to a serial device or other Linux device, to ensure exclusive access to the device while it's in-use. This prevents, for example, two programs both opening the same serial device and "competing" to read bytes from the device.

建议使用诸如/var/lock/LCK..ttyS1之类的SYSV风格的UUCP设备锁定文件.这就是 Linux串行HOTWO:锁定其他主机的建议.它也记录在文件系统层次结构标准中.它是通过诸如gtkterm,picocom之类的串行终端程序实现的.有一些库,例如 liblockdev

The advice has been to use SYSV-style UUCP device lock files such as /var/lock/LCK..ttyS1. That is what is recommended by Linux Serial HOTWO: Locking Out Others. It is also documented in the Filesystem Heirarchy Standard. It is implemented by serial terminal programs such as gtkterm, picocom. There are libraries such as liblockdev and liblockfile to support this (although the implementation details differ between these two libraries).

但是,我发现了 Debian错误#734086 ,表示在Linux上,已弃用SYSV风格的UUCP设备锁,并且 flock() 咨询应该使用锁.

However, I have found Debian bug #734086, which says on Linux, SYSV-style UUCP device locks are deprecated, and flock() advisory locks should be used instead.

但是,除了那个Debian错误本身,我找不到可靠的文档来源来描述这些SYSV风格的UUCP设备锁的弃用以及flock()的推荐.

However, I can't find a reliable document source to describe deprecation of these SYSV-style UUCP device locks, and recommendation of flock(), other than that Debian bug itself.

我还找到了ioctl(fd, TIOCEXCL),它由screen实用程序用来锁定终端.

I've also found ioctl(fd, TIOCEXCL) which is used by the screen utility to lock a terminal.

在Linux中锁定串行端口和其他设备的现代最佳实践"是什么?在哪里可以找到描述此内容的最新文档?

Which is the modern "best practice" for locking serial ports and other devices in Linux? Where can we find up-to-date documentation describing this?

推荐答案

据我所知,使用 Debian错误#734086 .请注意,这种Debian更改的最初倡导者Roger Leigh在2014/2015年已经从Debian和Linux转移到FreeBSD(请参见

As far as I can tell, using flock() locking of serial ports or other devices is probably the best the way to go in Linux, following Debian's lead in Debian bug #734086. Note that the original advocate of this Debian change, Roger Leigh, has moved away from Debian and Linux and onto FreeBSD in 2014/2015 (see his comments here). But Debian seems to be sticking with the flock() method, so that's worth something.

但是,鉴于此更改在此时尚未传达给更广泛的Linux社区,因此最好将较旧的SYSV风格的UUCP设备锁定文件(/var/lock/LCK..ttyS1)作为编译时选项来支持,以供使用在仍使用较旧的锁定方法的系统中.

However given how poorly this change has been communicated to the broader Linux community at this point, it could be good to support the older SYSV-style UUCP device lock files (/var/lock/LCK..ttyS1) as a compile-time option, for use in systems still using the older lock method.

例如 picocom 现在已更改为使用flock()方法,并选择了编译时SYSV样式的UUCP设备锁定文件.

E.g. picocom has now changed to using the flock() method, with a compile-time optional selection of SYSV-style UUCP device lock files.

我想就此问题向Serial HOWTO提交更新(因为这是Google针对"Linux序列锁"的第一个搜索结果),但是由于目前的维护,目前很难在LDP网站上更新文档状态.

I'd like to submit an update to the Serial HOWTO regarding this (since it's the first Google search result for "Linux serial lock"), but right now it's difficult to update documents on the LDP website due to its current maintenance state.

这篇关于在Linux中锁定串行端口和其他设备的最佳实践是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆