Разработка приложений в среде Linux. Второе издание
Шрифт:
127: poptContext optCon; /* контекст опций командной строки */
128: struct poptOption optionsTable[] = {
129: { "bps", 'b', POPT_ARG_INT, &speed, 0,
130: "скорость передачи сигналов, бит/с",
131: "<BPS>" },
132: { "crnl", 'с', POPT_ARG_VAL, &crnl, 'с',
133: "посылать символ возврата каретки с символом новой строки", NULL },
134: { "hwflow", 'h', POPT_ARG_VAL, &flow, 'h',
135: "использовать
аппаратное управление потоком", NULL },
136: { "swflow", 's', POPT_ARG_VAL, &flow, 's',
137: "использовать программное управление потоком", NULL },
138: { "noflow", 'n', POPT_ARG_VAL, &flow, 'n',
139: "отключить управление потоком", NULL },
140: { "raw", 'r', POPT_ARG_VAL, &raw, 1,
141: "включить неформатированный режим", NULL },
142: POPT_AUTOHELP
143: { NULL, '\0', 0, NULL, '\0', NULL, NULL }
144: };
145:
146: #ifdef DSLEEP
147: /* ожидать 10 минут, что позволить подключить отладчик */
148: sleep(600);
149: #endif
150:
151: optCon = poptGetContext("robin", argc, argv, optionsTable, 0);
152: poptSetOtherOptionHelp(optCon, "<port>");
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: /* отключение управления потоком */
Поделиться:
Популярные книги
Идеальный мир для Лекаря 8
8. Лекарь
Фантастика:
юмористическое фэнтези
аниме
7.00
рейтинг книги
Последняя Арена 6
6. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
По воле короля
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Душелов. Том 4
4. Внутренние демоны
Фантастика:
юмористическая фантастика
ранобэ
фэнтези
фантастика: прочее
хентай
эпическая фантастика
5.00
рейтинг книги
Темный Лекарь 2
2. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Эволюция мага
2. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
(Не) моя ДНК
6. Сапфировые истории
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Протокол "Наследник"
1. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Измена. Наследник для дракона
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Неудержимый. Книга II
2. Неудержимый
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Камень. Книга 4
4. Камень
Фантастика:
боевая фантастика
7.77
рейтинг книги
Измена. Право на сына
4. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Инквизитор Тьмы 4
4. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Кротовский, сколько можно?
5. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
5.00