如果我的一个进程打开了一个文件,比如只读模式,操作系统是否保证在我读取时没有其他进程会写入该文件呢?这可能会导致读取进程得到旧文件版本的第一部分和新文件版本的第二部分,从而使数据完整性受到质疑。我不是在谈论没有寻址能力的管道,而是普通文件,具有寻址选项(至少在只有一个进程打开时)。
不,当你读取文件时,其他进程可以更改文件内容。尝试运行"man fcntl"并忽略关于"advisory"锁定的部分;这些是"可选"锁定,只有进程想要才需要注意。相反,寻找(遗憾的是,非POSIX)的"mandatory"锁定。那些是保护你免受其他程序影响的锁定。尝试使用读取锁。
不,如果您打开一个文件,其他进程可以写入它,除非您使用锁定。
在Linux上,您可以使用以下命令在文件上添加咨询锁:
#include <sys/file.h>
...
flock(file_descriptor,LOCK_EX); // apply an advisory exclusive lock