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

на главную

Жанры

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

Троан Эрик В.

Шрифт:

Это дополнение и неизменяемые флаги могут быть изменены только пользователем root, поскольку это связано с операциями, которые может выполнять только root.

Другие флаги могут быть модифицированы либо пользователем root, либо владельцем файла.

Приведем пример небольшой программы, которая отображает флаги для любого файла, переданного в командной строке. Она работает только с файлами из файловой системы ext3 [48] . Вызов

ioctl
завершится неудачей, если применить его к файлам из любой другой файловой системы.

48

В

действительности это хорошо работает и на файловой системе ext2. Эти две файловые системы очень похожи (можно даже смонтировать систему ext3 на ext2), и представленные программы работают на обеих. Фактически, если в исходных тексте заменить 3 на 2, программы будут функционировать точно так же.

 1: /* checkflags.c */

 2:

 3: /* Для каждого имени файла, переданного в командной строке, отобразить

 4: информацию об атрибутах этого файла в файловой системе ext3. */

 5:

 6: #include <errno.h>

 7: #include <fcntl.h>

 8: #include <linux/ext3_fs.h>

 9: #include <stdio.h>

10: #include <string.h>

11: #include <sys/ioctl.h>

12: #include <unistd.h>

13:

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

15: const char **filename = argv + 1;

16: int fd;

17: int flags;

18:

19: /* Пройти по каждому имени файла, переданному в командной строке. Последний

20: указатель в argv[] равен NULL, поэтому такие циклы while корректны. */

21: while(*filename) {

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

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

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

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

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

27: if (fd<0) {

28: fprintf(stderr, "не открывается %s: %s\n", *filename,

29: strerror(errno));

30: return 1;

31: }

32:

33: /* Этот вызов получает атрибуты, и помещает их в flags */

34: if (ioctl(fd, EXT3_IOC_GETFLAGS, &flags)) {

35: fprintf(stderr, "ioctl завершился ошибкой на %s: %s\n", *filename,

36: strerror(errno));

37: return 1;

38: }

39:

40: printf("%s: ", *filename++);

41:

42: /*
Проверить каждый атрибут, и отобразить сообщение для каждого,

43: который включен. */

44: if (flags & EXT3_APPEND_FL) printf("Append");

45: if (flags & EXT3_IMMUTABLE_FL) printf("Immutable");

46: if (flags & EXT3_SYNC_FL) printf("Sync");

47: if (flags & EXT3_NODUMP_FL) printf("Nodump");

48:

49: printf("\n");

50: close(fd);

51: }

52:

53: return 0;

54: }

Ниже приведена похожая программа, которая устанавливает расширенные атрибуты ext3 для указанного списка файлов. Первый параметр должен быть списком флагов, которые нужно установить. Каждый флаг представляется в списке в виде одной буквы: А — только для добавления (append only), I — неизменяемый (immutable), S — синхронизированный (sync), N — недампированный (nodump). Эта программа не модифицирует существующие флаги файла; она только устанавливает флаги, переданные в командной строке.

 1: /* setflags.c */

 2:

 3: /* Первый параметр этой программы — строка, состоящая из

 4: 0 (допускается пустая) или более букв из набора I, A, S,

 5: N. Эта строка указывает, какие из атрибутов ext3 должны

 6: быть включены для файлов, указанных в остальных

 7: параметрах командной строки — остальные атрибуты выключаются

 8: буквы обозначают соответственно: immutable, append-only, sync и nodump.

 9:

10: Например, команда "setflags IN file1, file2" включает

11: флаги immutable и nodump для файлов file1 и file2, но отключает

12: флаги sync и append-only для этих файлов. */

13:

14: #include <errno.h>

15: #include <fcntl.h>

16: #include <linux/ext3_fs.h>

17: #include <stdio.h>

18: #include <string.h>

19: #include <sys/ioctl.h>

20: #include <unistd.h>

21:

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

23: const char **filename = argv + 1;

24: int fd;

25: int flags = 0;

26:

27: /* Убедиться, что указаны устанавливаемые флаги, вместе

28: с именами файлов. Позволить установить "0", как признак

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

Газлайтер. Том 8

Володин Григорий
8. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 8

На Ларэде

Кронос Александр
3. Лэрн
Фантастика:
фэнтези
героическая фантастика
стимпанк
5.00
рейтинг книги
На Ларэде

Охота на попаданку. Бракованная жена

Герр Ольга
Любовные романы:
любовно-фантастические романы
5.60
рейтинг книги
Охота на попаданку. Бракованная жена

Кай из рода красных драконов

Бэд Кристиан
1. Красная кость
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Кай из рода красных драконов

Хозяйка Проклятой Пустоши. Книга 2

Белецкая Наталья
2. Хозяйка Проклятой Пустоши
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Хозяйка Проклятой Пустоши. Книга 2

Безумный Макс. Поручик Империи

Ланцов Михаил Алексеевич
1. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
7.64
рейтинг книги
Безумный Макс. Поручик Империи

Потусторонний. Книга 2

Погуляй Юрий Александрович
2. Господин Артемьев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Потусторонний. Книга 2

Чапаев и пустота

Пелевин Виктор Олегович
Проза:
современная проза
8.39
рейтинг книги
Чапаев и пустота

Солнечный корт

Сакавич Нора
4. Все ради игры
Фантастика:
зарубежная фантастика
5.00
рейтинг книги
Солнечный корт

Лютая

Шёпот Светлана Богдановна
Любовные романы:
любовно-фантастические романы
6.40
рейтинг книги
Лютая

Ведьмак (большой сборник)

Сапковский Анджей
Ведьмак
Фантастика:
фэнтези
9.29
рейтинг книги
Ведьмак (большой сборник)

Наследие Маозари 4

Панежин Евгений
4. Наследие Маозари
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Наследие Маозари 4

Ученик

Губарев Алексей
1. Тай Фун
Фантастика:
фэнтези
5.00
рейтинг книги
Ученик

Начальник милиции. Книга 5

Дамиров Рафаэль
5. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции. Книга 5