Tigar wrote:
Передо мной стоит почти такая же задача. Опыта программирования у меня нет, вот пытаюсь разобраться как делать. Я хочу в цикле отрашивать открытые com порты через select(system call). Если что-то пришло, топрочитать и снова в цикл.
всё правильно
Ожидание чтения с порта хочу побороть установкой флага FNDELAY на на открытый дескриптор порта:(fcntl(fd, F_SETFL, FNDELAY))...
оно необязательно - если у вас есть данные для чтения (о чем известит select), то read не блокирует.
оно работает так:- есть данные - читаем их (даже если и меньше, чем запрошено: если от устройства пришел 1 байт, а мы ждем два - read вернет 1);
- нет данных - ждем. http://lists.debian.org/debian-russian/2001/06/msg00043.htmlобычно нужно использовать O_NONBLOCK _или_ select перед чтением (или многозадачность - например треды).
У вас используются треды, вот я и думаю, будет ли работать мой вариант без тредов и не будет ли он тормозить сичтему?
имхо:- вариант с select менее ресурсоемкий, проще в отладке (и вообще симпатичнее); - вариант с тредами предпочтительнее, когда логика программы требует многозадачности внутри программы.