Linux программирование в примерах | страница 88



>S_IRWXG00070Разрешение на чтение, запись и исполнение для группы
>S_IRGRP00040Разрешение на чтение для группы
>S_IWGRP00020Разрешение на запись для группы.
>S_IXGRP00010Разрешение на исполнение для группы
>S_IRWXO00007Разрешение на чтение, запись и исполнение для остальных.
>S_IROTH00004Разрешение на чтение для остальных.
>S_IWOTH00002Разрешение на запись для остальных
>S_IXOTH00001Разрешение на исполнение для остальных

Следующий фрагмент показывает, как создать переменные, представляющие разрешения >-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_ISUID04000Установить ID пользователя
>S_ISGID02000Установить ID группы
>S_ISVTX01000Сохранить текст

Когда стандартные утилиты создают файлы, они по умолчанию используют права доступа >-rw-rw-rw- (или 0666). Поскольку большинство пользователей предпочитают избегать файлов, в которые может записывать кто угодно, каждый процесс имеет при себе umask. >umask является набором битов допуска, указывающим те биты, которые никогда не должны устанавливаться при создании новых файлов, (umask не используется при изменении прав доступа.) Концептуально осуществляется операция