回到DOS,Borland C / C ++,您在O_DENYxxx
上可以使用open()
标志。在MS Visual Studio / Windows上,您拥有sopen()
,open()
的某些类型具有O_SHARE_xxxx
标志可用(例如ibm docs)。但是我似乎找不到适合的Linux操作系统?
答案 0 :(得分:1)
否,Linux没有任何这些标志。通常,在Unix系统上,具有足够权限的任何进程都可以随时对文件执行任何允许的操作。
但是,fcntl
和flock
都有锁定功能,它们允许合作进程对文件或文件的一部分进行读写锁定,以防止意外冲突。可以使用fcntl
来完成 强制锁定,但是从内核4.5开始,它是不可靠和不推荐使用的;您可以查看fcntl(2)
手册页以了解更多详细信息。如果您的程序可以在NFS上运行,则首选fcntl
进行锁定,因为flock
不能在那儿工作。
或者,如果您想要一个更简单的界面,则可以使用liblockfile之类的东西,它提供了一个简单的,NFS安全的锁定界面。
通常,在DOS和Windows上可用的共享锁定在Unix上被认为是一个坏主意,因为它阻止进程执行诸如重命名文件之类的操作或被广泛认为可以成功使用的其他操作。