MyBooks.club
Все категории

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

На сайте mybooks.club вы можете бесплатно читать книги онлайн без регистрации, включая Майкл Джонсон - Разработка приложений в среде Linux. Второе издание. Жанр: Программное обеспечение издательство -,. Доступна полная версия книги с кратким содержанием для предварительного ознакомления, аннотацией (предисловием), рецензиями от других читателей и их экспертным мнением.
Кроме того, на сайте mybooks.club вы найдете множество новинок, которые стоит прочитать.

Название:
Разработка приложений в среде Linux. Второе издание
Издательство:
-
ISBN:
-
Год:
-
Дата добавления:
16 сентябрь 2019
Количество просмотров:
244
Читать онлайн
Майкл Джонсон - Разработка приложений в среде Linux. Второе издание

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

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

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

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

ioctl(fd, VT_DISALLOCATE, vtnum);

Вы можете заблокировать и повторно открыть переключение VC с помощью нескольких простых команд управления вводом-выводом:

void disallow_vc_switch(int fd) {

 ioctl(fd, VT_LOCKSWITCH, 0);

}

void allow_vc_switch(int fd) {

 ioctl(fd, VT_UNLOCKSWITCH, 0);

}

20.6. Пример команды open

Ниже показан пример кода, выполняющий следующие задачи: поиск неиспользуемой VC, запуск на ней оболочки, ожидание завершения оболочки, переключение обратно, а также освобождение памяти, выделенной под VC, по завершении программы. Программа open, входящая в состав дистрибутива Linux, выполняет те же самые действия, но при этом она содержит больше опций и лучший контроль ошибок, таким образом, является более надежной. Хотя приведенная ниже версия тоже будет работать, ее трудно назвать удобной, надежной или безопасной.

 1: /* minopen.c */

 2:

 3: #include <stdio.h>

 4: #include <unistd.h>

 5: #include <stdlib.h>

 6: #include <signal.h>

 7: #include <fcntl.h>

 8: #include <sys/ioctl.h>

 9: #include <sys/vt.h>

10: #include <sys/stat.h>

11: #include <sys/types.h>

12: #include <sys/wait.h>

13:

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

15:  int vtnum;

16:  int vtfd;

17:  struct vt_stat vtstat;

18:  char device[32];

19:  int child;

20:

21:  vtfd = open("/dev/tty", O_RDWR, 0);

22:  if (vtfd < 0) {

23:   perror("minopen: не удается открыть /dev/tty");

24:   exit(1);

25:  }

26:  if (ioctl(vtfd, VT_GETSTATE, &vtstat) < 0) {

27:   perror("minopen: tty не является виртуальной консолью");

28:   exit(1);

29:  }

30:  if (ioctl(vtfd, VT_OPENQRY, &vtnum) < 0) {

31:   perror("minopen: нет свободных виртуальных консолей");

32:   exit(1);

33:  }

34:  sprintf(device, "/dev/tty%d", vtnum);

35:  if (access(device, (W_OK|R_OK)) < 0) {

36:   perror("minopen: недостаточные полномочия на tty");

37:   exit(1);

38:  }

39:  child = fork();

40:  if (child == 0) {

41:   ioctl(vtfd, VT_ACTIVATE, vtnum);

42:   ioctl(vtfd, VT_WAITACTIVE, vtnum);

43:   setsid();

44:   close(0); close(1); close(2);

45:   close(vtfd);

46:   vtfd = open(device, O_RDWR, 0); dup(vtfd); dup(vtfd);

47:   execlp("/bin/bash", "bash", NULL);

48:  }

49:  wait(&child);

50:  ioctl(vtfd, VT_ACTIVATE, vtstat.v_active);

51:  ioctl(vtfd, VT_WAITACTIVE, vtstat.v_active);

52:  ioctl(vtfd, VT_DISALLOCATE, vtnum);

53:  exit(0);

54: }

Глава 21

Консоль Linux

Консоль Linux, как правило, имитирует последовательный терминал. Выводя специальные последовательности символов в компонент консоли, можно управлять всеми аспектами воспроизведения на экране. Для вывода информации на экран обычно применяются S-Lang, curses или ряд других библиотек рисования на экране; они используют упомянутые управляющие последовательности. Консоль можно также читать и модифицировать через альтернативный полноэкранный интерфейс, который особенно полезен для некоторых специализированных программ.

Программисты для DOS, впервые сталкиваясь с программированием для Linux, обнаруживают пугающий их факт. Оказывается, вывод символов на экран — это не просто инициализация указателя на адрес экрана в памяти и последующая запись прямо через него. Некоторые даже жалуются в полный голос на эту "отсталую" систему, которая вынуждает их делать вид, что они выводят информацию в последовательный терминал, вписывая между символами управляющие последовательности. Последние выводятся на экран для управления перемещением курсора, цветом, очисткой экрана и так далее.

Существует несколько веских причин для того, чтобы рассматривать консоль как фиктивный последовательный терминал. И не последняя из них заключается в том, что когда программа уже активизирована на последовательном терминале, она все еще работает. Еще более важным является то, что программа корректно работает в сетях (в наше время Internet), а также в окне терминального эмулятора под X или каким-либо другим графическим интерфейсом пользователя. Более того, удаленно работающие программы (либо через сеть, либо через последовательное соединение) соответствующим образом выводят информацию на вашу консоль.

Кроме того, вы заметите, что управляющие коды являются рациональными низкоуровневыми интерфейсами для экрана. Они также служат хорошей основой для построения примитивов более высокого уровня вроде модуля curses, описанного в [36]. И это не просто случайность; последовательные терминалы являются весьма уважаемой технологией, которая годами превосходно отвечает фактическим потребностям программистов. Консоль Linux основана на наиболее популярном семействе последовательных терминалов, наследников DEC VT100.

Большинство управляющих последовательностей используют символ перехода (escape) ANSI, который не имеет печатного представления. Мы будем следовать библиотекам termcap и terminfo, в которых для обозначения символа перехода ANSI применяется ^[. Имейте в виду при чтении, что они иногда ссылаются на тот же самый символ, как на Е. Всюду в данной книге, как и в termcap и terminfo, выражение ^C указывает на символ Control-C.

21.1. Базы данных возможностей

Действия, контролируемые заданными управляющими последовательностями, часто называются возможностями (capabilities). Некоторые управляющие последовательности совместно используются большим числом терминалов. Многие из таких последовательностей определены в стандарте ANSI X3.64-1979. Почти все терминалы с возможностями поддержки цвета используют одни и те же последовательности для выбора цветов изображения. При этом многие терминалы поддерживают совершенно различные управляющие последовательности. Например, на терминале Wyse 30 нажатие <F1> передает последовательность ^ [email protected]r, тогда как на консоли Linux — последовательность ^[[[А. Аналогично, для того, чтобы переместить курсор вверх на Wyse 30, нужно послать символ ^K, а на консоли Linux — последовательность ^[[А. Для создания программы, которая может работать на любом терминале, вам крайне необходим метод абстрагирования подобных различий, который позволит программировать возможности, а не необработанные последовательности символов.

Наиболее известная библиотека программирования, которая предоставляет такую абстракцию, называется curses[154] (предписания); она описана в [36]. В нее входит два важных концептуальных уровня. Первый уровень предлагает функции, которые (говоря в общем) посылают одну управляющую последовательность для выполнения одного действия, такого как перемещение курсора вверх или вниз, прокрутка экрана и так далее. Второй уровень реализует концепцию "окон": независимые области окна, которые могут обрабатываться отдельно, при этом curses обеспечивает кратчайшие последовательности символов для достижения требуемого эффекта.

Библиотека curses определяет, какие последовательности передавать в терминал, консультируясь с базой данных, которая для каждого терминала ставит в соответствие названия возможностей строкам, которые должны пересылаться.

Linux, как все современные системы Unix, предлагает две базы данных, которые описывают терминалы в смысле их возможностей и соответствующих им управляющих последовательностей. Более старая база данных называется termcap (сокращение от terminal capabilities — терминальные возможности) и хранится в одном большом двумерном ASCII-файле по имени /etc/termcap. Этот файл постепенно стал очень громоздким; его размер вырос приблизительно до половины мегабайта. Более новая база данных называется terminfo (сокращение от terminal information — терминальная информация) и хранится во множестве бинарных файлов (по одному на терминал), как правило, в подкаталогах каталога /usr/lib/terminfo.

Внутри каждой базы данных информация о возможностях для каждого терминала индексируется одним (или более) уникальным именем. Обе базы данных используют одно и то же имя для одного и того же сериала. Например, консоль Linux называется linux и в termcap, и в terminfo. Вы сообщаете программам, какой терминальный вход использовать, путем установки переменной окружения TERM. При создании программ, использующих termcap и terminfo, вам редко придется обращаться к переменной TERM; обычно это берут на себя низкоуровневые библиотеки для получения доступа к базам данных termcap или terminfo.

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


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

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


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

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

Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*
Все материалы на сайте размещаются его пользователями.
Администратор сайта не несёт ответственности за действия пользователей сайта..
Вы можете направить вашу жалобу на почту librarybook.ru@gmail.com или заполнить форму обратной связи.