2015-03-30 2 views
2

Я пытаюсь написать строку в файл и установить права доступа к файлу 777. Полученный файл пуст и имеет разрешения 775. Маска режима кажется правильной, и когда я проверяю с доступом(), он возвращает 0. Я могу chmod файл до 777 (без использования sudo). Что происходит?Установка разрешений на 777, итоговый файл 775

Запуск ubuntu 14.10. Жесткий диск - ext3/4.

if (argc == 1) { 
    int fd = open ("sampleFile", O_CREAT , S_IRWXU | S_IRWXG | S_IRWXO); 
    int writ = 0xDEADBEEF; 

    if (fd != -1) { 
     char str [] = "My permission should be set to 777."; 
     writ = write (fd, &str, (int)strlen (str)); 
     //writ = access ("sampleFile", W_OK); 
     close (fd); 

     printf ("(%o) %s\n", writ, str); 
     return 0; 
    } 

    else { 
     printf ("Couldn't make sampleFile in pwd.\n"); 
     return 1; 
    } 
} 

ответ

2

У вас есть две проблемы:

  1. Второй аргумент write() "должен включать в себя один из следующих режимов доступа: O_RDONLY, O_WRONLY или O_RDWR". Измените O_CREAT на O_CREAT | O_WRONLY, чтобы разрешить запись в файл.

  2. Режим созданного файла изменяется umask. Вероятно, umask002. (A umask из 002 предотвращает случайное создание всемирно-записываемые файлы.) Вы можете использовать fchmod изменить права доступа после его создания .:
    fchmod(fd, S_IRWXU | S_IRWXG | S_IRWXO)

+1

1. Это было неосторожно меня. Я должен был внимательно прочитать справочную страницу. 2. Я понятия не имел, что такое umasks, но, прочитав его на человеке и назвав его в моем терминале, он вернул «0002», как вы подозревали. Я бы никогда не смог собрать это вместе; Большое спасибо. – Lou

Смежные вопросы