Atridies 0 25 апреля, 2014 Опубликовано 25 апреля, 2014 · Жалоба Доброго времени суток! Начал осваивать линукс и программирование под ним. Первым делом потребовалось написать программу, которая бы принимала данные по uart-у и парсила их на строки. Если выделение строки из массива данных - не проблема, то вот стирание буфера меня озадачило. Идеально было бы, если это происходило по отсутствию данных в течении несколько миллисекунд. В винде есть ReadTimeout, при превышении порога - стираем буфер. В линуксе - только read(); Вопрос: можно ли получить в линуксе время от последнего принятого байта? Заранее спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mdmitry 0 25 апреля, 2014 Опубликовано 25 апреля, 2014 · Жалоба Вопрос: можно ли получить в линуксе время от последнего принятого байта? А может стоит попробовать стандартный путь Serial-Programming-HOWTO Serial-HOWTO serial-programming-guide-for-posix-operating-systems Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Atridies 0 25 апреля, 2014 Опубликовано 25 апреля, 2014 · Жалоба Собсна, я кое-что из этого читал, и установка newtio.c_cc[VMIN] для меня не нова. Но мне хотелось бы обрабатывать входящие данные на лету, а стирать - после окончания пакета. Я сделал, чтобы функция read вообще не тормозила программу, и по каждому read()>0 - перезаписываю в свой буфер и обрабатываю. А вот сброс буфера - хотелось бы иметь после того, как прошло какое-то время тишины. Конечно, по VMIN - можно выходить из read() после 100 мс. тишины, но мне хотелось бы, чтобы программа не теряла лишнего времени, а обрабатывалась на лету. По одной из ссылок я увидел метод с использованием сигнала SIGIO. Но насколько я понял - мне это тоже не поможет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться