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

Здесь есть возможность читать онлайн «Майкл Джонсон - Разработка приложений в среде Linux. Второе издание» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 2007, ISBN: 2007, Издательство: Вильямс, Жанр: ОС и Сети, Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

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

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Разработка приложений в среде Linux. Второе издание»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

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

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

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Разработка приложений в среде Linux. Второе издание», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

35: struct termios ot, t;

36: struct winsize ws;

37: int done = 0;

38: struct sigaction act;

39:

40: if (ioctl(STDIN_FILENO, TIOCGWINSZ, &ws) < 0) {

41: perror("ptypair: не удается получить размеры окна");

42: exit(1);

43: }

44:

45: if ((pid = forkpty(&master, NULL, NULL, &ws)) < 0) {

46: perror("ptypair");

47: exit(1);

48: }

49:

50: if (pid == 0) {

51: /* запустить оболочку */

52: execl("/bin/sh", "/bin/sh", 0);

53:

54: /* сюда управление никогда не попадет */

55: exit(1);

56: }

57:

58: /* родительский процесс */

59: /* установить обработчик SIGWINCH */

60: act.sa_handler = sigwinch_handler;

61: sigemptyset(&(act.sa_mask));

62: act.sa_flags = 0;

63: if (sigaction(SIGWINCH, &act, NULL) < 0) {

64: perror("ptypair: невозможно обработать SIGWINCH");

65: exit(1);

66: }

67:

68: /* Обратите внимание, что настройки termios устанавливаются только

69: * для стандартного ввода; ведущая сторона pty НЕ является tty.

70: */

71: tcgetattr(STDIN_FILENO, &ot);

72: t = ot;

73: t.c_lflag &= ~(ICANON | ISIG | ECHO | ECHOCTL | ECHOE |

74: ECHOK | ECHOKE | ECHONL | ECHOPRT);

75: t.c_iflag |= IGNBRK;

76: t.c_cc[VMIN] = 1;

77: t.c_cc[VTIME] = 0;

78: tcsetattr(STDIN_FILENO, TCSANOW, &t);

79:

80: /* Этот код взят без изменений из robin.с

81: * Если дочерний процесс завершается, читающая ведущая сторона

82: * дoлжнa вернуть -1 и завершиться.

83: */

84: ufds[0].fd = STDIN_FILENO;

85: ufds[0].events = POLLIN;

86: ufds[1].fd = master;

87: ufds[1].events = POLLIN;

88:

89: do {

90: int r;

91:

92: r = poll(ufds, 2, -1);

93: if ((rs < 0) && (errno != EINTR)) {

94: done = 1;

95: break;

96: }

97:

98: /* сначала проверить возможность завершения */

99: if ((ufds[0].revents | ufds[1].revents) &

100: (POLLERR | POLLHUP | POLLNVAL)) {

101: done = 1;

102: break;

103: }

104:

105: if (propagate_sigwinch) {

106: /* обработчик сигналов запросил распространение SIGWINCH */

107: if (ioctl(STDIN_FILENO, TIOCGWINSZ, &ws) < 0) {

108: perror("ptypair: не удается получить размеры окна");

109: }

110: if (ioctl(master, TIOCSWINSZ, &ws) < 0) {

111: perror("не удается восстановить размеры окна");

112: }

113:

114: /* не делать этого снова до поступления следующего SIGWINCH */

115: propagate_sigwinch = 0;

116:

117: /* опрос мог быть прерван SIGWINCH,

118: * потому повторить попытку.

119: */

120: continue;

121: }

122:

123: if (ufds[1].revents & POLLIN) {

124: i = read (master, buf, BUFSIZE);

125: if (i >= 1) {

126: write(STDOUT_FILENO, buf, i);

127: } else {

128: done = 1;

129: }

130: }

131:

132: if (ufds[0].revents & POLLIN) {

133: i = read (STDIN_FILENO, buf, BUFSIZE);

134: if (i >= 1) {

135: write(master, buf, i);

136: } else {

137: done = 1;

138: }

139: }

140:

141: } while (!done);

142:

143: tcsetattr(STDIN_FILENO, TCSANOW, &ot);

144: exit(0);

145: }

Программа forkptytest.сделает очень немногое из того, чего вы раньше не видели. Обработка сигналов рассматривается в главе 12, а цикл poll()почти полностью переписан из кода robin.с, представленного ранее в этой главе (за исключением обработки управляющих символов), равно как и код, модифицирующий настройки termios.

Остается лишь объяснить распространение изменений размеров окна.

В строке 105 после завершения poll()мы проверяем, является ли причиной завершения poll()сигнал SIGWINCH, доставляемый функции sigwinch_handlerв строке 20. Если это так, необходимо получить новый размер текущего окна из стандартного ввода и распространить его в pty подчиненного компонента. Установкой размера окна SIGWINCHпередается автоматически процессу, работающему на pty; мы не должны явно передавать SIGWINCHэтому процессу.

Теперь для сравнения посмотрите, насколько усложняется этот код в случае использования функций, определенных в ptypair.с.

1: /* ptytest.с */

2:

3: #include

4: #include

5: #include

6: #include

7: #include

8: #include

9: #include

10: #include

11: #include

12: #include

13: #include

14: #include "ptypair.h"

15:

16:

17: volatile int propagate_sigwinch = 0;

18:

19: /* sigwinch_handler

20: * распространяет изменения размеров окна из входного файлового

21: * дескриптора на ведущую сторону pty.

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

Интервал:

Закладка:

Сделать

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

Представляем Вашему вниманию похожие книги на «Разработка приложений в среде Linux. Второе издание» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Геше Джампа Тинлей - Лоджонг (второе издание)
Геше Джампа Тинлей
Алексей Филатов - Люди «А». Второе издание
Алексей Филатов
Отзывы о книге «Разработка приложений в среде Linux. Второе издание»

Обсуждение, отзывы о книге «Разработка приложений в среде Linux. Второе издание» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x