在Linux中独占打开设备文件

时间:2013-04-02 11:17:40

标签: c linux posix flock

有哪些方法可用于专门打开设备文件(例如显示帧缓冲区)?

[信息:我已经知道flock()&朋友,只有在其他应用程序也在使用它时才会产生效果(换句话说:open()会成功,但如果已经锁定,flock()将失败) - >但仍然可以使用从open()检索到的设备句柄来写入显示..]

当我想对设备文件强制执行此类独占访问时,情况如何?如何实施这样的执法?

提前致谢!

4 个答案:

答案 0 :(得分:5)

来自fcntl(2)

  

要使用强制锁,必须启用强制锁          在包含要锁定文件的文件系统上以及          文件本身。

...此外,您还需要在内核中启用platine_mass

  

使用以下命令在文件系统上启用了强制锁定          mount(8)的“ -o mand”选项,或MS_MANDLOCK标志用于          mount(2)。通过禁用组在文件上启用强制锁定          对文件执行权限并启用set-group-ID permis-          sion位(请参阅chmod(1)和chmod(2))。

     

POSIX未指定强制锁定。其他一些系统          支持强制锁定,尽管有关如何启用它的详细信息          随系统而异。

因此,当您请求符合CONFIG_MANDATORY_FILE_LOCKING的解决方案时,答案是:,POSIX标准中没有这样的功能。

答案 1 :(得分:0)

要打开设备,您应该在linux中使用打开系统调用并检查可用设备列表,例如/ dev / ttyUSB0或/ dev / ttyS0等,然后打开它,您将获得一个写入和读取设备的描述符是您打开设备进行通信。 要了解更多详细信息,请访问以下链接: http://www.firmcodes.com/lower-level-file-handling-in-linux/

答案 2 :(得分:0)

如果您想获得对设备的独占访问权限,请在/var/lock中创建一个锁定文件。可以使用open("my_device.lock", O_CREAT|O_EXCL, 0777)创建锁定文件的进程可以访问设备,其他进程必须等待。使用设备完成该过程后,它会关闭文件。

这种锁只是建议性的,并不保证没有其他进程(您不知道)访问该设备。

答案 3 :(得分:0)

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