Nп/п : 72 из 100
От : Denis Sovkov 2:5020/570.77 29 ноя 23 22:08:04
К : All 29 ноя 23 22:10:02
Тема : Непонятки с read и write
----------------------------------------------------------------------------------
@MSGID: 2:5020/570.77 65678c27
@CHRS: CP866 2
@TZUTC: 0300
@TID: hpt/lnx 1.4.0-sta 16-02-06
* Forwarded from ru.unix by Denis Sovkov (2:5020/570.77).
* Originally by: Denis Sovkov (2:5020/570.77), 29 Nov 23 22:02.
* Originally to: all.
Hello everybody!
Ситауция следующая: имеем программу, программа открывает /dev/ttyUSB0
с флагом O_RDWR - можно как записывать, так и читать. В программе два
параллельных потока - один раз в 3 секунды записывать текстовыю строку в
открытый дескриптор, другой считывает оттуда присланную строку ПОБАЙТНО внешним
устройством тогда, когда сможет и выводит на экран. Проблема в том, что во
входные данные попадает часть того, что пишется в дескриптор, причем
независимо от времени. Пробовал защищать дескриптор мютексом - не помогло,
мусорные данные все равно попадают на вход (кстати, нужные данные при этом
тоже считываются). Пробовал ставить флаг O_DSYNC - тоже не помогло.
Мозможно, нужно очищать буфер (какой и как?) сразу после отправки строки. В
потоках буферы используются разные - для каждого потока свой. Имею ввиду
очистку выходного буфера, который пишет write. ЧЯДНТ? Куда копать?
Denis
--- GoldED+/LNX 1.1.5-b20180707
* Origin: ----> Default GoldED Origin <---- (2:5020/570.77)
SEEN-BY: 46/49 50/18 361 450/68 452/28 455/19
469/122 5010/275 5019/40
SEEN-BY: 5020/101 290 545 556 570 715 837 848
921 1042 2992 4096 4441 9696
SEEN-BY: 5020/12000 5022/2 128 5023/24 5026/49
5028/63 5030/500 1081 1900
SEEN-BY: 5034/13 5037/28 5055/73 5057/19 5059/37
5060/900 5075/128 6035/4
SEEN-BY: 6056/1 6078/80 6090/1
@PATH: 5020/570 715 4441