В настоящее время я работаю над «Интерфейсом программирования Linux», и в главе 4 есть упражнение, в котором мы должны переписать команду «tee». Я сделал это, но независимо от того, что я делаю, мои права доступа к файлам (хранящиеся в переменной типа mode_t) не устанавливаются правильно.
то есть у меня есть этот код:
filePerms = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH; // filePerms is mode_t
foutputFd = open((argc == 2) ? argv[1] : argv[2], flags, filePerms); // don't worry about the ternary here
if (foutputFd == -1)
errExit("opening file %s", (argc == 2) ? argv[1] : argv[2]); // ...or here.
После того, как все сказано и сделано, файл в каталоге будет иметь права rw-r--r--
вместо rw-rw-rw
, указанные выше флагами.
Теперь я провел некоторое исследование, и похоже, что аргумент mode, переданный в open()
, указывает максимальное количество разрешенных разрешений, а затем он все равно изменяется позже (каким-то образом). Если это так, то почему это так? Зачем вообще позволять мне указывать разрешения в открытом вызове?
Любая помощь будет оценена по достоинству, я бы хотел продолжить эту книгу, но эта проблема немного расстраивает, лол (и я вообще не нашел объяснений в книге).
umask
. Раздел 15.4.6 - person Duck   schedule 16.12.2013