如果是创建文件并将其关闭的过程:
void function_procA (void) {
FILE *G_fp = NULL;
G_fp = fopen("/var/log/file.log", "w");
fclose(G_fp);
}
另一个进程是否可以打开指向该文件的指针并开始写入该文件?
void function_procB (void) {
FILE *G_fp = NULL;
G_fp = fopen("/var/log/file.log", "w");
fprintf(G_fp, "Hello, World!\n");
fclose(G_fp);
}
简而言之:不同进程之间的文件权限是什么?如果默认情况下只有一个进程获得写入文件的独占权限,那么如何更改权限以使其他进程有权写入该文件?
感谢。
答案 0 :(得分:2)
这将成为一场数据竞赛。
文件锁定可以很容易地避免:
#include <sys/file.h>
flock(fileno(fp), LOCK_SH); // shared lock for reading
flock(fileno(fp), LOCK_EX); // exlusive lock
flock(fileno(fp), LOCK_UN); // release lock
以上示例适用于linux,但不了解Windows。 flock
只是fcntl
系统调用的包装器。
答案 1 :(得分:0)
如果两个进程都由同一个用户运行,它应该可以工作。
答案 2 :(得分:0)
我认为this Wikipedia article有很好的描述。
引用:
类似Unix的操作系统(包括Linux和Apple的OS X)没有 通常会自动锁定打开文件或运行程序。一些 各种文件锁定机制有不同的风格 Unix和许多操作系统支持多种类型 兼容性。两种最常见的机制是fcntl(2)和 群(2)。第三种这样的机制是锁定(3),它可以是分开的或 可以使用前两个基元中的任一个来实现。虽然 某些类型的锁可以配置为必需的文件锁 在Unix下是默认的咨询。这意味着合作 进程可以使用锁来协调对文件的访问 他们自己,但不合作的过程也可以自由地忽略锁 并以他们选择的任何方式访问该文件。换句话说,文件锁 仅锁定其他文件柜,而不是I / O.