Re: Непонятки с read и write
Eugene Grosbein написал(а) к Denis Sovkov в Nov 23 12:10:31 по местному времени:
29 нояб. 2023, среда, в 22:02 NOVT, Denis Sovkov написал(а):
DS> Ситауция следующая: имеем программу, программа открывает /dev/ttyUSB0 с флагом
DS> O_RDWR - можно как записывать, так и читать. В программе два параллельных потока
DS> - один раз в 3 секунды записывать текстовыю строку в открытый дескриптор, другой
DS> считывает оттуда присланную строку ПОБАЙТНО внешним устройством тогда, когда
DS> сможет и выводит на экран. Проблема в том, что во входные данные попадает часть
DS> того, что пишется в дескриптор, причем независимо от времени. Пробовал защищать
DS> дескриптор мютексом - не помогло, мусорные данные все равно попадают на вход
DS> (кстати, нужные данные при этом тоже считываются). Пробовал ставить флаг O_DSYNC
DS> - тоже не помогло. Мозможно, нужно очищать буфер (какой и как?) сразу после
DS> отправки строки. В потоках буферы используются разные - для каждого потока свой.
DS> Имею ввиду очистку выходного буфера, который пишет write. ЧЯДНТ? Куда копать?
Похоже на то, что у устройства, подключенного через USB,
включено эхо ввода. И ему надо его выключить.
У старых аналоговых модемов такое было и у других устройств
с terminal line discipline тоже.
Что за устройство?
Eugene
--- slrn/1.0.3 (FreeBSD)
|