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

Тут можно читать онлайн Майкл Джонсон - Разработка приложений в среде Linux. Второе издание - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-osnet, издательство Вильямс, год 2007. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Разработка приложений в среде Linux. Второе издание
  • Автор:
  • Жанр:
  • Издательство:
    Вильямс
  • Год:
    2007
  • Город:
    Москва
  • ISBN:
    978-5-8459-1143-8
  • Рейтинг:
    3.8/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

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

Разработка приложений в среде Linux. Второе издание - описание и краткое содержание, автор Майкл Джонсон, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

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

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

Разработка приложений в среде Linux. Второе издание - читать онлайн бесплатно полную версию (весь текст целиком)

Разработка приложений в среде Linux. Второе издание - читать книгу онлайн бесплатно, автор Майкл Джонсон
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Таблица 11.4. Расширенные атрибуты файла

Атрибут Определение
EXT3_APPEND_FL Если файл открыт для записи, должен быть указан флаг O_APPEND.
EXT3_IMMUTABLE_FL Файл не может быть модифицирован или удален ни одним пользователем, включая root.
EXT3_NODUMP Файл должен быть проигнорирован командой dump.
EXT3_SYNC_FL Файл должен обновляться синхронно, как если бы при открытии был указан флаг O_SYNC

Поскольку расширенные атрибуты ext3 выходят за пределы стандартного интерфейса файловых систем, они не могут модифицироваться с помощью chmod(), как все остальные атрибуты. Вместо этого используется ioctl(). Вспомним, как определен вызов ioctl().

#include

#include

int ioctl(int fd, int request, void *arg);

Файл, атрибуты которого меняются, должен быть открыт, как для fchmod(). Запрос (параметр request) на получение текущего состояния флагов — EXT3_IOC_GETFLAGS, а для установки их — EXT3_IOC_SETFLAGS. В обоих случаях argдолжен быть указателем на int. Если используется EXT3_IOC_GETFLAGS, то longустанавливается в текущее значение программных флагов. Если применяется EXT3_IOC_SETFLAGS, то новое значение файловых флагов берется из int, на который указывает arg.

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

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

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

1: /* checkflags.c */

2:

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

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

5:

6: #include

7: #include

8: #include

9: #include

10: #include

11: #include

12: #include

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

15: #include

16: #include

17: #include

18: #include

19: #include

20: #include

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", как признак

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

30: if (argc<3){

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

32: "\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: }

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Майкл Джонсон читать все книги автора по порядку

Майкл Джонсон - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


Отзывы читателей о книге Разработка приложений в среде Linux. Второе издание, автор: Майкл Джонсон. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x