我有一个名为foo.hex
的文件,被两个进程访问。其中一个进程具有O_RDONLY
访问权限,另一个进程则具有O_RDWR
访问权限。
在首次启动系统时,读取进程在写入进程初始化文件之前不应访问该文件。
因此,我编写了以下内容来初始化文件。
fd = open("foo.hex", O_RDWR|O_CREAT, 0666);
flock(fd, LOCK_EX);
init_structures(fd);
flock(fd, LOCK_UN);
这仍然存在一个可能性,即读者进程在文件初始化之前访问该文件。
我找不到一种以原子方式open()
和flock()
的方法。除了互斥锁,还有哪些可能性以最少的开销优雅地实现我的目标(因为它只在系统第一次启动时使用一次)?
open("foo.hex", O_RDWR|O_CREAT|O_EXCL, 0666)
。 - zwolflock()
锁定是建议性的,而不是强制性的,因此即使您在一个进程中应用了锁定,如果它忽略了锁定,另一个进程仍然可以继续执行其操作。 - Jonathan Leffler