Linux программирование в примерах | страница 88
>S_IRWXG | 00070 | Разрешение на чтение, запись и исполнение для группы |
>S_IRGRP | 00040 | Разрешение на чтение для группы |
>S_IWGRP | 00020 | Разрешение на запись для группы. |
>S_IXGRP | 00010 | Разрешение на исполнение для группы |
>S_IRWXO | 00007 | Разрешение на чтение, запись и исполнение для остальных. |
>S_IROTH | 00004 | Разрешение на чтение для остальных. |
>S_IWOTH | 00002 | Разрешение на запись для остальных |
>S_IXOTH | 00001 | Разрешение на исполнение для остальных |
Следующий фрагмент показывает, как создать переменные, представляющие разрешения >-rw-r--r--
и >-rwxr-xr-x
(0644 и 0755 соответственно):
>mode_t rw_mode, rwx_mode;
>rw_mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH; /* 0644 */
>rwx_mode = S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH; /* 0755 */
Более старый код использовал >S_IREAD
, >S_IWRITE
и >S_IEXEC
вместе со сдвигом битов для получения того же результата:
>mode_t rw_mode, rwx_mode;
>rw_mode = (S_IREAD|S_IWRITE) | (S_IREAD >> 3) | (S_IREAD >> 6); /* 0644 */
>rwx_mode = (S_IREAD|S_IWRITE|S_IEXEC) |
> ((S_IREAD|S_IEXEC) >> 3) | ((S_IREAD|S_IEXEC) >> 6); /* 0755 */
К сожалению, ни одна из записей не является очень удобной. Современные версии предпочтительнее, поскольку у каждого бита доступа есть собственное имя и меньше вероятность неправильного выполнения побитовых операций.
При изменении прав доступа к файлу для использования доступны биты дополнительных разрешений, показанные в табл. 4.6, но они не должны использоваться при первоначальном создании файла. Возможность включения этих битов широко варьирует между операционными системами. Лучше всего не пробовать; вместо этого следует изменить права доступа к файлу явным образом после его создания. (Изменение прав доступа описано в разделе 5.5.2 «Изменение прав доступа: >chmod()
и >fchmod()
». Значения этих битов обсуждаются в главе 11 «Права доступа и идентификаторы пользователя и группы».)
Таблица 4.6. Дополнительные символические имена POSIX для режимов доступа к файлам
Символическое имя | Значение | Смысл |
---|---|---|
>S_ISUID | 04000 | Установить ID пользователя |
>S_ISGID | 02000 | Установить ID группы |
>S_ISVTX | 01000 | Сохранить текст |
Когда стандартные утилиты создают файлы, они по умолчанию используют права доступа >-rw-rw-rw-
(или 0666). Поскольку большинство пользователей предпочитают избегать файлов, в которые может записывать кто угодно, каждый процесс имеет при себе umask. >umask
является набором битов допуска, указывающим те биты, которые никогда не должны устанавливаться при создании новых файлов, (umask не используется при изменении прав доступа.) Концептуально осуществляется операция