У меня есть следующая простая программа:Почему O_CREAT создает файлы, доступные только администраторам?
#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
должен установить владельца файла на эффективный идентификатор пользователя процесса. Я компилирую/запускаю свое приложение с терминала, но не с помощью каких-либо привилегий, поэтому почему созданный файл доступен только для администраторов?
Хороший звонок. Моя первая мысль заключалась в том, что ['umask (2)'] (http://linux.die.net/man/2/umask) настроен на какое-то странное значение, но это, безусловно, правильное объяснение. –
@sircodesalot: 0444 действительно S_IRUSR | S_IRGRP | S_IROTH. R для чтения (W для записи, X для выполнения). Я просто использовал; Я не знаю, почему он был там, но он был частью '' перед тем, как были изобретены мнемоники S_I [RWX] {USR, GRP, OTH}. Я изучил восьмеричные коды æons ago - и они более кратки, чем обозначения S_I *. –
Удивительный, спасибо за такую помощь. – sircodesalot