我有以下简单程序:
#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。我正在从终端编译/运行我的应用程序,但没有任何类型的权限,那么为什么创建的文件只对管理员可见?
答案 0 :(得分:10)
随机错误。当您使用O_CREAT
时,open()
是一个3参数函数,它将文件模式作为第三个参数。
您应该使用:
int fd = open("some_file.txt", O_CREATE | O_WRONLY, 0444);
这将创建一个没有任何人写入权限的文件(但您的进程可以写入该文件)。
有关用于代替0444
的POSIX符号常量的更多信息,请参阅<sys/stat.h>
。