----------------------------------------------------------------------------------
@MSGID: grosbein.net ebf6b900
@REPLY: 2:5020/570.77 65678bae
@RFC-Reply-To: eugen@grosbein.net
@RFC-X-newsgroup: nkz.fido.ru.unix
@RFC-X-RealName: Eugene Grosbein
29 нояб. 2023, среда, в 22:02 NOVT, Denis Sovkov написал(а):
DS> Ситауция следующая: имеем программу, программа открывает
/dev/ttyUSB0 с флагом
DS> O_RDWR - можно как записывать, так и читать. В программе два
параллельных потока
DS> - один раз в 3 секунды записывать текстовыю строку в открытый
дескриптор, другой
DS> считывает оттуда присланную строку ПОБАЙТHО внешним устройством
тогда, когда
DS> сможет и выводит на экран. Проблема в том, что во входные
данные попадает часть
DS> того, что пишется в дескриптор, причем независимо от времени.
Пробовал защищать
DS> дескриптор мютексом - не помогло, мусорные данные все равно
попадают на вход
DS> (кстати, нужные данные при этом тоже считываются). Пробовал
ставить флаг O_DSYNC
DS> - тоже не помогло. Мозможно, нужно очищать буфер (какой и как?) сразу после
DS> отправки строки. В потоках буферы используются разные - для
каждого потока свой.
DS> Имею ввиду очистку выходного буфера, который пишет write.
ЧЯДHТ? Куда копать?
Похоже на то, что у устройства, подключенного через USB,
включено эхо ввода. И ему надо его выключить.
У старых аналоговых модемов такое было и у других устройств
с terminal line discipline тоже.
Что за устройство?
Eugene
--- slrn/1.0.3 (FreeBSD)
* Origin: RDTC JSC (2:5006/1@fidonet)
SEEN-BY: 221/6 250/25 301/1 341/66 463/68 467/888
4500/1 5000/111 5001/100
SEEN-BY: 5003/17 5005/49 5006/1 8 5015/42 46
5019/40 5020/113 545 715 828 830
SEEN-BY: 5020/846 848 1042 2038 2332 2992 4441
12000 5022/128 5030/49 115 500
SEEN-BY: 5030/1081 1474 5049/1 3 5053/51 5054/8 89
5058/104 5061/133 5080/31
SEEN-BY: 5080/102 172 245 5083/1 444 6090/1
@PATH: 5006/1 5080/102 5030/49 5020/1042 4441