首页 > 解决方案 > Linux / GCC 是否支持文件共享允许-拒绝类型?

问题描述

回到 DOS,Borland C/C++ 你O_DENYxxxopen(). 在 MS Visual Studio / Windows 上sopen(),您有一些可用的open()标志O_SHARE_xxxx(例如 ibm 文档)。但我似乎无法找到 Linux 有什么类似的工作方式?

标签: linuxfcntl

解决方案


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

但是,withfcntl和 with都有锁定功能,flock允许协作进程对文件或其部分进行读写锁定,以防止意外冲突。可以使用强制锁定fcntl,但从内核 4.5 开始不可靠且已弃用;您可以查看fcntl(2)手册页以获取更多详细信息。如果您的程序将在 NFS 上运行,fcntl则首选锁定,因为flock在那里不起作用。

或者,如果您想要一个更简单的接口,您可以使用类似liblockfile的东西,它提供了一个简单的、NFS 安全的锁定接口。

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


推荐阅读