Вход/Регистрация
Разработка приложений в среде Linux. Второе издание
вернуться

Троан Эрик В.

Шрифт:
Имя Значение Описание
S_ISUID
0004000
Программа является setuid-программой.
S_ISGID
0002000
Программа является setgid-программой.
S_ISVTX
0001000
Sticky-бит.
S_IRWXU
00700
Владелец файла имеет права на чтение, запись и выполнение.
S_IRUSR
00400
Владелец файла имеет права на чтение.
S_IWUSR
00200
Владелец файла имеет права на запись.
S_IXUSR
00100
Владелец файла имеет права на выполнение.
S_IRWXG
00070
Группа файла имеет права на чтение, запись и выполнение.
S_IRGRP
00040
Группа файла имеет права на чтение.
S_IWGRP
00020
Группа файла имеет права на запись.
S_IXGRP
00010
Группа файла имеет права на выполнение.
S_IRWXO
00007
Прочие пользователи имеют права на чтение, запись и выполнение.
S_IROTH
00004
Прочие пользователи имеют права на чтение.
S_IWOTH
00002
Прочие пользователи имеют права на запись.
S_IXOTH
00001
Прочие пользователи имеют права на выполнение.

11.1.3. Типы файлов

Старшие четыре бита режима файла указывают тип файла. В табл. 11.2 перечислены константы, имеющие отношение к типам файлов. Объединение с помощью битовой операции "И" любых этих констант с режимом файла порождает ненулевое значение, если бит установлен.

Таблица 11.2. Константы типов файлов

Имя Значение (восьмеричное) Описание
S_IFMT
00170000
Это значение, побитно объединенное с режимом с помощью операции "И", дает тип файла (который эквивалентен одному из остальных значений
S_IF
).
S_IFSOCK
0140000
Файл является сокетом.
S_IFLNK
0120000
Файл является символической ссылкой.
S_IFREG
0100000
Файл является обычным файлом.
S_IFBLK
0060000
Файл представляет блочное устройство.
S_IFDIR
0040000
Файл является каталогом.
S_IFCHR
0020000
Файл представляет символьное устройство.
S_IFIFO
0010000
Файл представляет коммуникационный канал "первый вошел — первый вышел".

Описанные ниже макросы принимают в качестве аргумента режим файла и возвращают

true
или
false
.

S_ISLINK(m)
Истинно, если файл является символической ссылкой.
S_ISREC(m)
Истинно, если файл является обычным файлом.
S_ISDIR(m)
Истинно, если файл является каталогом.
S_ISCHR(m)
Истинно, если файл представляет символьное устройство.
S_ISBLK(m)
Истинно, если файл представляет блоковым устройство.
S_ISFIFO(m)
Истинно, если файл является каналом "первый вошел — первый вышел"
S_ISSOCK(m)
Истинно, если файл является сокетом.

11.1.4. Маска umask процесса

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

Текущая установка umask для процесса выполняется системным вызовом

umask
.

#include <sys/stat.h>

int umask(int newmask);

Возвращается старое значение и устанавливается новое значение umask процесса. Для файла могут быть указаны только права на чтение, запись и исполнение — вы не можете использовать umask для запрещения установки setuid, setgid или sticky-бита. Команда

umask
представлена в большинстве командных процессоров и позволяет пользователю устанавливать umask для самой командной оболочки и всех его последующих дочерних процессов.

В качестве примера, команда

touch
создает новые файлы с правами 0666 (общие права на чтение и запись). Так как пользователю подобное редко подходит, он может заставить команду
touch
отключать общие и групповые права записи для файла с помощью команды
umask 022
, как показано ниже.

$ umask 022

$ touch foo

$ ls -l foo

– rw-r--r-- 1 ewt ewt 0 Feb 24 21:24 foo

Если он предпочитает давать права на запись группе, то может вместо этого назначит

umask 002
.

$ umask 002

$ touch foo

$ ls -l foo

– rw-rw-r-- 1 ewt ewt 0 Feb 24 21:24 foo

Если же он хочет, чтобы его файлы были доступны только ему, это обеспечит

umask 077
.

$ umask 077

$ touch foo

$ ls -l foo

– rw------- 1 ewt ewt 0 Feb 24 21:24 foo

umask процесса влияет на системные вызовы

open
,
creat
,
mknod
и
mkdir
.

11.2. Основные файловые операции

Поскольку значительная часть системных вызовов Linux манипулирует файлами, начнем с демонстрации наиболее широко используемых функций. Более специализированные функции обсудим далее в настоящей главе. Функции, применяемые для чтения каталогов, представлены в главе 14, чтобы сделать настоящую главу более краткой.

11.2.1. Файловые дескрипторы

Когда процесс получает доступ к файлу (что обычно называют открытием файла), то ядро возвращает ему файловый дескриптор, который затем используется процессом для всех операций с файлом. Файловые дескрипторы — это маленькие положительные целые числа, которые служат индексами массива открытых файлов, создаваемого ядром для каждого процесса.

  • Читать дальше
  • 1
  • ...
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: