Linux / GCC是否支持文件共享允许-拒绝类型?



回到DOS,Borland C/C++你在open()上有O_DENYxxx标志可用。 在MS Visual Studio/Windows上,您有sopen(),某些风格的open()具有可用的O_SHARE_xxxx标志(例如IBM文档(。 但是我似乎找不到 Linux 可用的类似工作方式?

不,Linux 没有任何这些标志。 通常,在Unix系统上,任何具有足够权限的进程都可以随时对文件执行任何允许的操作。

但是,有锁定工具,包括fcntlflock,允许协作进程对文件或文件的一部分进行读写锁定,以防止意外冲突。可以使用fcntl完成强制锁定,但它不可靠并且从内核 4.5 开始已弃用;有关更多详细信息,请参阅fcntl(2)手册页。 如果您的程序将在 NFS 上运行,则首选fcntl进行锁定,因为flock在那里不起作用。

或者,如果你想要一个更简单的界面,你可以使用像liblockfile这样的东西,它提供了一个直接的、NFS安全的锁定接口。

一般来说,在DOS和Windows上可用的共享锁定在Unix上被认为是一个坏主意,因为它阻止进程执行诸如重命名文件或其他操作之类的操作,这些操作被广泛期望可用并成功。

相关内容

最新更新