有哪些方法可以专门打开设备文件(例如,显示帧缓冲区)?
[信息:我已经知道flock() 和朋友,它们只有在其他应用程序也在使用它时才会起作用(换句话说:open() 会成功,但如果flock() 已经锁定,则会失败)--> 但是仍然可以使用从 open() 检索到的设备句柄来写入显示器..]
如果我想对设备文件强制执行此类独占访问,该怎么办?这样的强制执行怎么可能?
提前致谢!
从fcntl(2):
要使用强制锁定,必须在包含要锁定的文件的文件系统和文件本身上都启用强制锁定。
...另外,您需要CONFIG_MANDATORY_FILE_LOCKING
在内核中启用。
使用 mount(8) 的“-o mand”选项或 mount(2) 的 MS_MANDLOCK 标志在文件系统上启用强制锁定。通过禁用文件的组执行权限并启用 set-group-ID 权限位(请参阅 chmod(1) 和 chmod(2)),对文件启用强制锁定。
POSIX 未指定强制锁定。其他一些系统也支持强制锁定,尽管如何启用它的细节因系统而异。
因此,当您请求posix
兼容的解决方案时,答案是:不,POSIX 标准中没有这样的功能。
要打开设备,您应该在 linux 中使用open 系统调用并检查可用设备的列表,例如 /dev/ttyUSB0 或 /dev/ttyS0 等,然后打开它,您将获得一个要写入和读取设备的描述符是你打开一个设备进行通信。要了解更多详情,请点击链接: http ://www.firmcodes.com/lower-level-file-handling-in-linux/
尝试lockf():在打开的文件上应用、测试或删除 POSIX 锁
如果您想获得对设备的独占访问权限,请在/var/lock
. 可以创建锁定文件的进程可以open("my_device.lock", O_CREAT|O_EXCL, 0777)
访问设备,其他进程必须等待。使用设备完成该过程后,它会关闭文件。
这种锁定只是建议性的,并不能保证没有其他进程(您不知道)访问该设备。