C语言 在Linux中以独占方式打开设备文件

zed5wv10  于 2022-12-17  发布在  Linux
关注(0)|答案(4)|浏览(675)

有哪些方法可用于独占打开设备文件(例如,显示帧缓冲区)?
[Info:我已经知道flock()& friends,只有当其他应用程序也在使用它时才会有效果(换句话说:open()将成功,但flock()将失败(如果已锁定)--〉但从open()检索到的设备句柄仍可用于写入显示..]
如果我想在设备文件上强制执行这种独占访问权限,该怎么办?这种强制如何实现?

bogh5gae

bogh5gae1#

fcntl(2)开始:
要使用强制锁定,必须同时在包含要锁定的文件的文件系统和文件本身上启用强制锁定。
...另外,您需要在内核中启用CONFIG_MANDATORY_FILE_LOCKING
强制锁定可以在文件系统上使用“-o命令”选项来挂载(8),或者使用MS_MANDLOCK标志来挂载(2)。强制锁定可以通过禁用文件的组执行权限并启用set-group-ID权限位来启用(参见chmod(1)和chmod(2))。
POSIX没有指定强制锁定。一些其他系统也支持强制锁定,尽管如何启用它的细节在不同的系统中有所不同。
因此,当您请求符合posix的解决方案时,答案是:,POSIX标准中没有这样的特性。

7dl7o3gd

7dl7o3gd2#

尝试lockf():在打开的文件上应用、测试或删除POSIX锁

ghhkc1vu

ghhkc1vu3#

要打开设备,您应该在linux中使用open system call,检查可用设备列表(例如/dev/ttyUSB 0或/dev/ttyS 0等),然后打开它,您将获得一个描述符,以便在打开设备进行通信时写入和读取该设备。要了解更多详细信息,请访问链接:http://www.firmcodes.com/lower-level-file-handling-in-linux/

juzqafwq

juzqafwq4#

如果您想独占访问某个设备,请在/var/lock中创建一个锁文件。可以使用open("my_device.lock", O_CREAT|O_EXCL, 0777)创建锁文件的进程将获得对该设备的访问权限,其他进程必须等待。该进程使用该设备完成后,将关闭该文件。
这样的锁只是建议性的,并不保证没有其他进程(您不知道的)访问该设备。

相关问题