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

на главную

Жанры

Разработка приложений в среде Linux. Второе издание

Троан Эрик В.

Шрифт:

29: того, что все флаги должны быть сброшены. */

30: if (argc<3){

31: fprintf(stderr, "Использование setflags: [0][I][A][S][N]"

32: "<filenames>\n");

33: return 1;

34: }

35:

36: /* каждая буква представляет флаг; установить

37: флаг, которые указаны */

38: if (strchr(argv[1], 'I') ) flags |= EXT3_IMMUTABLE_FL;

39: if (strchr(argv[1], 'A') ) flags |= EXT3_APPEND_FL;

40: if (strchr(argv[1], 'S') ) flags |= EXT3_SYNC_FL;

41: if (strchr(argv[1], 'N') ) flags |= EXT3_NODUMP_FL;

42:

43: /*
пройти по всем именам в argv[] */

44: while (*(++filename)) {

45: /* В отличие от нормальных атрибутов, атрибута ext3 можно опрашивать,

46: только если есть файловый дескриптор (имя файла не годится).

47: Для выполнения запроса атрибутов ext3 нам не нужен доступ на запись,

48: поэтому O_RDONLY подойдет. */

49: fd = open(*filename, O_RDONLY);

50: if (fd < 0) {

51: fprintf(stderr, "невозможно открыть %s:%s\n", *filename,

52: strerror(errno));

53: return 1;

54: }

55:

56: /* Установить атрибуты в соответствии с переданными

57: флагами. */

58: if (ioctl(fd, EXT3_IOC_SETFLAGS, &flags)) {

59: fprintf(stderr, "Сбой ioctl в %s:%s\n", *filename,

60: strerror(errno));

61: return 1;

62: }

63: close(fd);

64: }

65:

66: return 0;

67: }

11.4. Манипулирование содержимым каталогов

Вспомните, что компоненты каталогов (имена файлов) — это ни что иное, как указатели на дисковые информационные узлы (on-disk inodes); почти вся важная информация, касающаяся файла, хранится в его inode. Вызов

open
позволяет процессу создавать компоненты каталогов, которые являются обычными файлами, но для создания файлов других типов и для манипулирования компонентами каталогов могут понадобиться другие функции. Функции, которые позволяют создавать, удалять и выполнять поиск каталогов, описаны в главе 14; файлы сокетов — в главе 17. В настоящем разделе раскрываются символические ссылки, файлы устройств и FIFO.

11.4.1. Создание входных точек устройств и именованных каналов

Процессы создают файлы устройств и именованных каналов в файловой системе с помощью вызова

mknod
.

#include <fcntl.h>

#include <unistd.h>

int mknod(const char *pathname, mode_t mode, dev_t dev);

pathname
это имя файла, который нужно создать,
mode
— это и режим доступа (который модифицируется текущим
umask
), и тип нового файла (
S_IFIFO
,
S_IFBLK
,
S_IFCHR
). Последний параметр,
dev
, содержит старший (major) и младший (minor) номера создаваемого устройства. Тип устройства (символьное или блочное) и старший номер устройства сообщают ядру, какой драйвер устройств отвечает за операции с этим файлом устройства. Младший номер используется внутри драйвером устройства, чтобы различать отдельные устройства среди многих, которыми он управляет. Только пользователю root разрешено создавать файлы устройств; именованные же каналы могут создавать все пользователи.

Заголовочный файл

<sys/sysmacros.h>
представляет три макроса для манипулирования значениями типа
dev_t
. Макрос
makedev
принимает старшие номера в первом аргументе, младшие — во втором и возвращает значение
dev_t
, ожидаемое
mknod
. Макросы
major
и
minor
принимают значение типа
dev_t
в качестве единственного аргумента и возвращают, соответственно, старший и младший номер устройства.

Программа

mknod
, доступная в Linux, предоставляет пользовательский интерфейс к системному вызову
mknod
(подробности см. в
man 1 mknod
). Ниже приведена упрощенная реализация
mknod
для иллюстрации системного вызова
mknod
. Следует отметить, что программа создает файл с режимом доступа 0666 (предоставляя право на чтение и запись всем пользователям) и зависит от системной установки umask процесса для получения прав доступа.

 1: /* mknod.с */

 2:

 3: /* Создать устройство или именованный канал, указанный в командной строке.

 4: См. подробности о параметрах командной строки

 5: на man-странице mknod(1). */

 6:

 7: #include <errno.h>

 8: #include <stdio.h>

 9: #include <stdlib.h>

10: #include <string.h>

11: #include <sys/stat.h>

12: #include <sys/sysmacros.h>

13: #include <unistd.h>

14:

15: void usage(void) {

16: fprintf (stderr, "использование: mknod <путь> [b | с | u | p]"

17: "<старший> <младший>\n");

18: exit(1);

19: }

20:

21: int main(int argc, const char **argv) {

22: int major = 0, minor = 0;

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

Жребий некроманта 2

Решетов Евгений Валерьевич
2. Жребий некроманта
Фантастика:
боевая фантастика
6.87
рейтинг книги
Жребий некроманта 2

Предатель. Вернуть любимую

Дали Мила
4. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Предатель. Вернуть любимую

Бывший муж

Рузанова Ольга
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Бывший муж

Мама для дракончика или Жена к вылуплению

Максонова Мария
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Мама для дракончика или Жена к вылуплению

Жандарм 5

Семин Никита
5. Жандарм
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Жандарм 5

Менталист. Эмансипация

Еслер Андрей
1. Выиграть у времени
Фантастика:
альтернативная история
7.52
рейтинг книги
Менталист. Эмансипация

Кодекс Охотника. Книга XXIV

Винокуров Юрий
24. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXIV

Лорд Системы 14

Токсик Саша
14. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Лорд Системы 14

Смерть может танцевать 4

Вальтер Макс
4. Безликий
Фантастика:
боевая фантастика
5.85
рейтинг книги
Смерть может танцевать 4

Идеальный мир для Лекаря 2

Сапфир Олег
2. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 2

Черный Маг Императора 8

Герда Александр
8. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 8

Не отпускаю

Шагаева Наталья
Любовные романы:
современные любовные романы
эро литература
8.44
рейтинг книги
Не отпускаю

Идеальный мир для Лекаря 8

Сапфир Олег
8. Лекарь
Фантастика:
юмористическое фэнтези
аниме
7.00
рейтинг книги
Идеальный мир для Лекаря 8

Темный Патриарх Светлого Рода 3

Лисицин Евгений
3. Темный Патриарх Светлого Рода
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Темный Патриарх Светлого Рода 3