Есть проблемка одна: пишу драйвер для устройства, которое висит на последовательном порту. Оно юзает только линии данных на порту. Работа такая: запрос - ответ. Причём, после запроса должно пройти нормальное время (~50мсек) для того, чтобы появился ответ.
Пользую "non-canonical" (типа raw) режим работы с портом, но мне нужно, чтобы вызов read() блокировался, пока не придёт нужное кол-во данных в порт. Это необходимое количество данных не постоянно и варьируется от запроса к запросу.
Два варианта решения этой проблемы (как я вижу): -делать write() -- запрос, потом спать 50-60 мсек и читать read().
-делать write() потом менять newtio.c_cc[VMIN] на нужное кол-во байт, делать tcsetattr() и потом только читать, тогда read() заблокируется.
Но, ведь в вызове read() мы указываем последним параметром нужное кол-во символов. Нельзя ли как-нить обойтись без выставления каждый раз режима работы порта и сделать так, чтобы read() блокировался каждый раз?