Linux / GCC 是否支持文件共享允许-拒绝类型?
Does Linux / GCC have file sharing allow-deny type support?
回到 DOS,Borland C/C++ 你在 open()
上有 O_DENYxxx
可用的标志。在 MS Visual Studio / Windows 上,你有 sopen()
,open()
的某些版本有 O_SHARE_xxxx
可用的标志(例如 ibm 文档)。但我似乎找不到 Linux 有什么类似的功能?
不,Linux 没有任何这些标志。通常在Unix系统上,任何具有足够权限的进程都可以随时对文件执行任何允许的操作。
但是,fcntl
和 flock
都有锁定功能,允许协作进程对文件或文件的一部分进行读写锁定,以防止无意的冲突。 是 强制锁定,可以用 fcntl
完成,但它不可靠并且从内核 4.5 开始已弃用;您可以查看 fcntl(2)
手册页以获取更多详细信息。如果您的程序将 运行 通过 NFS,则首选 fcntl
进行锁定,因为 flock
在那里不起作用。
或者,如果您想要一个更简单的界面,您可以使用类似 liblockfile 的东西,它提供了一个简单的、NFS 安全的锁定界面。
一般来说,在 DOS 和 Windows 上可用的共享锁定在 Unix 上被认为是一个坏主意,因为它阻止进程执行重命名文件或其他被广泛期望可用并成功的操作.
回到 DOS,Borland C/C++ 你在 open()
上有 O_DENYxxx
可用的标志。在 MS Visual Studio / Windows 上,你有 sopen()
,open()
的某些版本有 O_SHARE_xxxx
可用的标志(例如 ibm 文档)。但我似乎找不到 Linux 有什么类似的功能?
不,Linux 没有任何这些标志。通常在Unix系统上,任何具有足够权限的进程都可以随时对文件执行任何允许的操作。
但是,fcntl
和 flock
都有锁定功能,允许协作进程对文件或文件的一部分进行读写锁定,以防止无意的冲突。 是 强制锁定,可以用 fcntl
完成,但它不可靠并且从内核 4.5 开始已弃用;您可以查看 fcntl(2)
手册页以获取更多详细信息。如果您的程序将 运行 通过 NFS,则首选 fcntl
进行锁定,因为 flock
在那里不起作用。
或者,如果您想要一个更简单的界面,您可以使用类似 liblockfile 的东西,它提供了一个简单的、NFS 安全的锁定界面。
一般来说,在 DOS 和 Windows 上可用的共享锁定在 Unix 上被认为是一个坏主意,因为它阻止进程执行重命名文件或其他被广泛期望可用并成功的操作.