Показать сообщение отдельно
  #3  
Старый 30.11.2023, 12:11
Eugene Grosbein
Guest
 
Сообщений: n/a
По умолчанию 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)
Ответить с цитированием