如果我的某个进程打开一个文件,让我们说只读,O.S保证在我阅读时没有其他进程会写入,也许 将阅读过程与旧文件版本的第一部分和新文件版本的第二部分分开,使数据完整性成为可疑问题?
我不是在谈论没有搜索的管道,而是在常规文件上,使用搜索选项(至少只用一个进程打开)。
答案 0 :(得分:3)
不,其他进程可以在您阅读时更改文件内容。尝试运行“man fcntl”和忽略关于“咨询”锁的部分;那些是“可选的”锁,只有在需要时才需要注意进程。相反,寻找(唉,非POSIX)“强制”锁。 那些会保护您免受其他程序攻击。尝试读锁定。
答案 1 :(得分:2)
不,如果您打开文件,其他进程可以写入,除非您使用锁。
在Linux上,您可以使用以下命令在文件上添加建议锁定
#include <sys/file.h>
...
flock(file_descriptor,LOCK_EX); // apply an advisory exclusive lock
答案 2 :(得分:2)
任何可以打开文件进行写入的进程都可以写入。写入可能与您自己的写入同时发生,从而导致(可能)不确定状态。
作为应用程序编写者,您有责任确保不会发生不良事件。在我看来,强制锁定并不是一个好主意。
更好的想法是不向您不想写入文件的进程授予写入权限。
如果多个进程打开一个文件,它们将具有独立的文件指针,因此它们可以搜索()而不会相互影响。
如果一个文件是由一个线程程序打开的(或者是一个与另一个文件描述符共享的任务,更常见的是),文件指针也是共享的,所以你需要使用另一种方法来访问该文件以避免竞争条件引起混乱 - 通常是pread,pwrite或者分散/收集函数readv和writev。