Непонятки с 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
|