1

我有以下简单的程序:

#include <iostream>
#include <fcntl.h>
#include <unistd.h>
#include <string>

using namespace std;

int main() {
    string data { "The quick brown fox jumps over the lazy dog" };

    int file_descriptor = open("some_file.txt", O_CREAT | O_WRONLY);
    write(file_descriptor, data.c_str(), data.size());

    cout << file_descriptor << endl;
    return 0;
}

在大多数情况下工作正常 - 数据被输出到文件中。但是根据http://linux.die.net/man/2/open,该O_CREAT标志应该将文件所有者设置为进程的有效用户 ID。我正在从终端编译/运行我的应用程序,但没有任何权限,那么为什么创建的文件只对管理员可见?

4

1 回答 1

11

随机失误。当你使用O_CREAT,open()是一个三参数函数,它将文件模式作为第三个参数。

你应该使用:

int fd = open("some_file.txt", O_CREATE | O_WRONLY, 0444);

这将创建一个对任何人都没有写入权限的文件(但您的进程将能够写入该文件)。

有关<sys/stat.h>用于代替 POSIX 符号常量的更多信息,请参阅0444

于 2013-09-20T20:36:19.953 回答