Чтение онлайн

на главную - закладки

Жанры

Linux программирование в примерах
Шрифт:

Возвращает

true
, если
filename
является обычным файлом.

S_ISDIR(stbuf.st_mode)

Возвращает

true
, если
filename
является каталогом.

S_ISCHR(stbuf.st_mode)

Возвращает

true
, если
filename
является символьным устройством. Устройства вскоре будут обсуждены более подробно.

S_ISBLK(stbuf.st_mode)

Возвращает

true
, если
filename
является блочным устройством.

S_ISFIFO(stbuf.st_mode)

Возвращает

true
, если
filename
является FIFO.

S_ISLNK(stbuf.st_mode)

Возвращает

true
,
если
filename
является символической ссылкой. (Это может никогда не вернуть
true
, если вместо
lstat
использовались
stat
или
fstat
.)

S_ISSOCK(stbuf.st_mode)

Возвращает

true
, если
filename
является сокетом.

ЗАМЕЧАНИЕ. В GNU/Linux эти макросы возвращают 1 для

true
и 0 для
false
. Однако, на других системах возможно, что они будут возвращать для
true
вместо 1 произвольное неотрицательное число. (POSIX определяет лишь ненулевое значение в противоположность нулевому). Поэтому всегда следует использовать эти макросы как автономные тесты вместо проверки возвращаемого значения.

/* Корректное использование */

if (S_ISREG(stbuf.st_mode)) ...

/* Heкорректное использование */

if (S_ISREG(stbuf.st_mode) ==1) ...

Наряду с макросами

<sys/stat.h>
предоставляет два набора битовых масок. Один набор для проверки прав доступа, а другой - для проверки типа файла. Мы видели маски прав доступа в разделе 4.6 «Создание файлов», когда обсуждали тип
mode_t
и значения для
open
и
creat
. Битовые маски, их числовые значения для GNU/Linux и смысл приведены в табл. 5.2.

Таблица 5.2. Битовые маски POSIX для типов файлов и прав доступа в

<sys/stat.h>

Маска Значение Комментарий
S_IFMT
0170000 Маска для битовых полей типа файла
S_IFSOCK
0140000 Сокет.
S_IFLNK
0120000 Символическая ссылка
S_IFREG
0100000 Обычный файл.
S_IFBLK
0060000 Блочное устройство.
S_IFDIR
0040000 Каталог.
S_IFCHR
0020000 Символьное устройство.
S_IFIFO
0010000 FIFO.
S_ISUID
0004000 Бит setuid.
S_ISGID
0002000 Бит setgid
S_ISVTX
0001000 «Липкий» (sticky) бит.
S_IRWXU
0000700 Маска для прав доступа владельца.
S_IRUSR
0000400 Доступ на чтение для владельца.
S_IWUSR
0000200 Доступ на запись для владельца.
S_IXUSR
0000100 Доступ
на исполнение для владельца.
S_IRWXG
0000070 Маска для прав доступа группы.
S_IRGRP
0000040 Доступ на чтение для группы.
S_IWGRP
0000020 Доступ на запись для группы.
S_IXGRP
0000010 Доступ на исполнение для группы.
S_IRWXO
0000007 Маска для прав доступа остальных.
S_IROTH
0000004 Доступ на чтение для остальных.
S_IWOTH
0000002 Доступ на запись для остальных.
S_IXOTH
0000001 Доступ на исполнение для остальных.

Некоторые из этих масок служат цели изолирования различных наборов битов, закодированных в поле

st_mode
:

• 

S_IFMT
представляет биты 12–15, которыми закодированы различные типы файлов.

• 

S_IRWXU
представляет биты 6–8, являющиеся правами доступа владельца (на чтение, запись, исполнение для User).

• 

S_IRWXG
представляет биты 3–5, являющиеся правами доступа группы (на чтение, запись, исполнение для Group).

• 

S_IRWXO
представляет биты 0–2, являющиеся правами доступа для «остальных» (на чтение, запись, исполнение для Other).

Биты прав доступа и типа файла графически изображены на рис. 5.3.

Рис. 5.3. Биты прав доступа и типа файлов

Маски типов файлов стандартизованы главным образом для совместимости со старым кодом; они не должны использоваться непосредственно, поскольку такой код менее читаем, чем соответствующие макросы. Случается, что макрос реализован с использованием масок: довольно логично, но это не подходит для кода уровня пользователя.

Стандарт POSIX явным образом констатирует; что в будущем не будут стандартизированы новые битовые маски и что тесты для любых дополнительных разновидностей типов файлов, которые могут быть добавлены, будут доступны лишь в виде макросов

S_ISxxx
.

5.4.4.1. Сведения об устройстве

Стандарт POSIX не определяет значение типа

dev_t
, поскольку предполагалось его использование на не-Unix системах также, как на Unix-системах. Однако стоит знать, что находится в
dev_t
.

Когда истинно

S_ISBLK(sbuf.st_mode)
или
S_ISCHR(sbuf.st_mode)
, сведения об устройстве находятся в поле
sbuf.st_rdev
. В противном случае это поле не содержит никакой полезной информации.

Традиционно файлы устройств Unix кодируют старший и младший номера устройства в значении

dev_t
. По старшему номеру различают тип устройства, такой, как «дисковый привод» или «ленточный привод». Старшие номера различают также разные типы устройств, такие, как диск SCSI в противоположность диску IDE. Младшие номера различают устройства данного типа, например, первый диск или второй. Вы можете увидеть эти значения с помощью '
ls -l
':

$ ls -l /dev/hda /dev/hda? /* Показать номера для первого жесткого диска */

brw-rw---- 1 root disk 3, 0 Aug 31 2002 /dev/hda

brw-rw---- 1 root disk 3, 1 Aug 31 2002 /dev/hda1

brw-rw---- 1 root disk 3, 2 Aug 31 2002 /dev/hda2

brw-rw---- 1 root disk 3, 3 Aug 31 2002 /dev/hda3

brw-rw---- 1 root disk 3, 4 Aug 31 2002 /dev/hda4

brw-rw---- 1 root disk 3, 5 Aug 31 2002 /dev/hda5

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

Законы Рода. Том 5

Flow Ascold
5. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 5

Идеальный мир для Социопата 4

Сапфир Олег
4. Социопат
Фантастика:
боевая фантастика
6.82
рейтинг книги
Идеальный мир для Социопата 4

Архонт

Прокофьев Роман Юрьевич
5. Стеллар
Фантастика:
боевая фантастика
рпг
7.80
рейтинг книги
Архонт

Идущий в тени. Книга 2

Амврелий Марк
2. Идущий в тени
Фантастика:
фэнтези
6.93
рейтинг книги
Идущий в тени. Книга 2

Мне нужна жена

Юнина Наталья
Любовные романы:
современные любовные романы
6.88
рейтинг книги
Мне нужна жена

Я же бать, или Как найти мать

Юнина Наталья
Любовные романы:
современные любовные романы
6.44
рейтинг книги
Я же бать, или Как найти мать

Ратник

Ланцов Михаил Алексеевич
3. Помещик
Фантастика:
альтернативная история
7.11
рейтинг книги
Ратник

Барон нарушает правила

Ренгач Евгений
3. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон нарушает правила

Столичный доктор. Том III

Вязовский Алексей
3. Столичный доктор
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Столичный доктор. Том III

Ты не мой BOY

Рам Янка
5. Самбисты
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Ты не мой BOY

Маршал Советского Союза. Трилогия

Ланцов Михаил Алексеевич
Маршал Советского Союза
Фантастика:
альтернативная история
8.37
рейтинг книги
Маршал Советского Союза. Трилогия

Авиатор: назад в СССР 12

Дорин Михаил
12. Покоряя небо
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Авиатор: назад в СССР 12

Крестоносец

Ланцов Михаил Алексеевич
7. Помещик
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Крестоносец

Муж на сдачу

Зика Натаэль
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Муж на сдачу