Чтение онлайн

на главную - закладки

Жанры

Разработка приложений в среде 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
рейтинг книги
Идеальный мир для Лекаря 8

Последняя Арена 6

Греков Сергей
6. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 6

По воле короля

Леви Кира
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
По воле короля

Душелов. Том 4

Faded Emory
4. Внутренние демоны
Фантастика:
юмористическая фантастика
ранобэ
фэнтези
фантастика: прочее
хентай
эпическая фантастика
5.00
рейтинг книги
Душелов. Том 4

Темный Лекарь 2

Токсик Саша
2. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь 2

Эволюция мага

Лисина Александра
2. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эволюция мага

(Не) моя ДНК

Рымарь Диана
6. Сапфировые истории
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
(Не) моя ДНК

Протокол "Наследник"

Лисина Александра
1. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Протокол Наследник

Измена. Наследник для дракона

Солт Елена
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Измена. Наследник для дракона

Неудержимый. Книга II

Боярский Андрей
2. Неудержимый
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Неудержимый. Книга II

Камень. Книга 4

Минин Станислав
4. Камень
Фантастика:
боевая фантастика
7.77
рейтинг книги
Камень. Книга 4

Измена. Право на сына

Арская Арина
4. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Право на сына

Инквизитор Тьмы 4

Шмаков Алексей Семенович
4. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 4

Кротовский, сколько можно?

Парсиев Дмитрий
5. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Кротовский, сколько можно?