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

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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

148: sleep(600);

149: #endif

150:

151: optCon = poptGetContext("robin", argc, argv, optionsTable, 0);

152: poptSetOtherOptionHelp(optCon, "");

153:

154: if (argc < 2) {

155: poptPrintUsage(optCon, stderr, 0);

156: die(1, "He достаточно аргументов", "");

157: }

158:

159: if ((с = poptGetNextOpt(optCon)) < -1) {

160: /* ошибка во время обработки опций */

161: fprintf(stderr, "%s: %s\n",

162: poptBadOption(optCon, POPT_BADOPTION_NOALIAS),

163: poptStrerror(c));

164: return 1;

165: }

166: portname = poptGetArg(optCon);

167: if (!portname) {

168: poptPrintUsage(optCon, stderr, 0);

169: die(1, "He указано имя порта", "");

170: }

171:

172: pf = open(portname, O_RDWR);

173: if (pf < 0) {

174: poptPrintUsage(optCon, stderr, 0);

175: die(1, strerror(errno), portname);

176: }

177: poptFreeContext(optCon);

178:

179: /* изменить конфигурацию порта */

180: tcgetattr(pf, &pts);

181: pots = pts;

182: /* некоторые настройки устанавливаются произвольно */

183: pts.c_lflag &= ~ICANON;

184: pts.c_lflag &= ~(ECHO | ECHOCTL | ECHONL);

185: pts.c_cflag |= HUPCL;

186: pts.c_cc[VMIN] = 1;

187: pts.c_cc[VTIME] = 0;

188:

189: /* Стандартная обработка CR/LF: это неинтеллектуальный терминал.

190: * Не транслируется:

191: * нет NL -> отображение CR/NL в выводе,

192: * нет CR -> отображение NL во вводе.

193: */

194: pts.c_oflag &= ~ONLCR;

195: pts.c_iflag &= ~ICRNL;

196:

197: /* Теперь перейти на сторону локального терминала */

198: tcgetattr(STDIN_FILENO, &sts);

199: sots = sts;

200: /* и снова несколько произвольных настроек */

201: sts.c_iflag &= ~(BRKINT | ICRNL);

202: sts.c_iflag |= IGNBRK;

203: sts.c_lflag &= ~ISIG;

204: sts.c_cc[VMIN] = 1;

205: sts.c_cc[VTIME] = 0;

206: sts.c_lflag &= ~ICANON;

207: /* нет локального эхо: разрешить эхо-контроль на другом конце */

208: sts.c_lflag &= ~(ECHO | ECHOCTL | ECHONL);

209:

210: /* обработка опций сейчас будет модифицировать pts и sts */

211: switch (flow) {

212: case 'h' :

213: /* аппаратное управление потоком */

214: pts.c_cflag |= CRTSCTS;

215: pts.c_iflag &= ~(IXON | IXOFF | IXANY);

216: break;

217: case 's':

218: /* программное управление потоком */

219: pts.c_cflag &= ~CRTSCTS;

220: pts.c_iflag |= IXON | IXOFF | IXANY;

221: break;

222: case 'n':

223: /* отключение управления потоком */

224: pts.c_cflag &= ~CRTSCTS;

225: pts.c_iflag &= ~(IXON | IXOFF | IXANY);

226: break;

227: }

228: if (crnl) {

229: /* послать CR с NL */

230: pts.c_oflag |= ONLCR;

231: }

232:

233: /* скорость не изменяется, пока не будет указано -b */

234: if (speed) {

235: cfsetospeed(&pts, symbolic_speed(speed));

236: cfsetispeed(&pts, symbolic_speed(speed));

237: }

238:

239: /* установить обработчик сигналов для восстановления

240: * старого обработчика termios */

241: sact.sa_handler = cleanup_termios;

242: sigaction(SIGHUP, &sact, NULL);

243: sigaction(SIGINT, &sact, NULL);

244: sigaction(SIGPIPE, &sact, NULL);

245: sigaction(SIGTERM, &sact, NULL);

246:

247: /* установить измененные настройки termios */

248: tcsetattr(pf, TCSANOW, &pts);

249: tcsetattr(STDIN_FILENO, TCSANOW, &sts);

250:

251: ufds[0].fd = STDIN_FILENO;

252: ufds[0].events = POLLIN;

253: ufds[1].fd = pf;

254: ufds[1].events = POLLIN;

255:

256: do {

257: int r;

258:

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

260: if ((r < 0) && (errno != EINTR))

261: die(1, "неожиданный сбой poll", "");

262:

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

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

265: (POLLERR | POLLHUP | POLLNVAL)) {

266: done = 1;

267: break;

268: }

269:

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

271: /* pf содержит символы */

272: i = read (pf, buf, BUFSIZE);

273: if (i >= 1) {

274: write(STDOUT_FILENO, buf, i);

275: } else {

276: done = 1;

277: }

278: }

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

280: /* стандартный ввод содержит символы */

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

282: if (i >= 1) {

283: if (raw) {

284: write(pf, buf, i);

285: } else {

286: cook_buf(pf, buf, i);

287: }

288: } else {

289: done = 1;

290: }

291: }

292: } while (!done);

293:

294: /* восстановить первоначальные настройки терминала и завершиться*/

295: tcsetattr(pf, TCSANOW, &pots);

296: tcsetattr(STDIN_FILENO, TCSANOW, &sots);

297: exit(0);

298: }

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

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

Интервал:

Закладка:

Сделать

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

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


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

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

x