Показать сообщение отдельно
  #2  
Старый 30.11.2023, 08:51
Sergei Podstrigailo
Guest
 
Сообщений: n/a
По умолчанию Непонятки с read и write

Sergei Podstrigailo написал(а) к Denis Sovkov в Nov 23 10:03:22 по местному времени:

Нello Denis!

29 Nov 23 22:02, Denis Sovkov wrote to All:

DS> Нello everybody!


DS> Ситауция следующая: имеем программу, программа открывает /dev/ttyUSB0
DS> с флагом O_RDWR - можно как записывать, так и читать. В программе два
DS> параллельных потока - один раз в 3 секунды записывать текстовыю строку
DS> в открытый дескриптор, другой считывает оттуда присланную строку
DS> ПОБАЙТО внешним устройством тогда, когда сможет и выводит на экран.
DS> Проблема в том, что во входные данные попадает часть того, что пишется
DS> в дескриптор, причем независимо от времени. Пробовал защищать
DS> дескриптор мютексом - не помогло, мусорные данные все равно попадают
DS> на вход (кстати, нужные данные при этом тоже считываются). Пробовал
DS> ставить флаг O_DSYNC - тоже не помогло. Мозможно, нужно очищать буфер
DS> (какой и как?) сразу после отправки строки. В потоках буферы
DS> используются разные - для каждого потока свой. Имею ввиду очистку
DS> выходного буфера, который пишет write. ЧЯДТ? Куда копать?


Лично я открываю так, и у меня всё работает как ожидается:

InputFd=open(SerDevice, ORDWR | O_NOCTTY | OSYNC );


Sergei

--- GoldED/W32 3.0.1
Ответить с цитированием