C中进程的文件权限

时间:2014-02-21 19:45:12

标签: c file-permissions

如果是创建文件并将其关闭的过程:

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);
}

简而言之:不同进程之间的文件权限是什么?如果默认情况下只有一个进程获得写入文件的独占权限,那么如何更改权限以使其他进程有权写入该文件?

感谢。

3 个答案:

答案 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.