forum.wfido.ru  

Вернуться   forum.wfido.ru > Прочие эхи > RU.LINUX

Ответ
 
Опции темы Опции просмотра
  #1  
Старый 29.11.2023, 23:11
Denis Sovkov
Guest
 
Сообщений: n/a
По умолчанию Непонятки с read и write

Denis Sovkov написал(а) к All в Nov 23 22:08:04 по местному времени:

* 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.


Нello everybody!


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


Denis


--- GoldED+/LNX 1.1.5-b20180707
Ответить с цитированием
  #2  
Старый 29.11.2023, 23:30
Nil A
Guest
 
Сообщений: n/a
По умолчанию Непонятки с read и write

Nil A написал(а) к Denis Sovkov в Nov 23 22:23:44 по местному времени:

Нello, Denis!

Wednesday November 29 2023 22:08, from Denis Sovkov -> All:

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

Возможно, там где-то написано, что операции с сериальным /dev/ttyUSB не thread-safe.
А что тебе мешает в потоке номер 1 просто сделать slect()/poll()/epoll() на выбор и пиши/читай, и делай после этого что тебе надо.

Best Regards, Nil
--- GoldED+/LNX 1.1.5
Ответить с цитированием
  #3  
Старый 30.11.2023, 00:11
Denis Sovkov
Guest
 
Сообщений: n/a
По умолчанию Непонятки с read и write

Denis Sovkov написал(а) к Nil A в Nov 23 22:44:14 по местному времени:


Нello Nil!

29 Nov 23 22:23, you wrote to me:

DS>> входные данные попадает часть того, что пишется в дескриптор,
DS>> причем независимо от времени.

NA> Возможно, там где-то написано, что операции с сериальным /dev/ttyUSB
NA> не thread-safe. А что тебе мешает в потоке номер 1 просто сделать
NA> slect()/poll()/epoll() на выбор и пиши/читай, и делай после этого что
NA> тебе надо.

Мешает отсутствие должной полноты знаний по IO в *NIX. Посмотрел маны на указанные вызовы - любопытно, спасибо! Буду копать в эту сторону. Завтра я не на работе, так что проверить смогу только послезавтра наверное... Будет время по RTFMмить ))

Denis


--- GoldED+/LNX 1.1.5-b20180707
Ответить с цитированием
  #4  
Старый 30.11.2023, 08:51
Nil A
Guest
 
Сообщений: n/a
По умолчанию Непонятки с read и write

Nil A написал(а) к Denis Sovkov в Nov 23 23:15:18 по местному времени:

Нello, Denis!

Wednesday November 29 2023 22:44, from Denis Sovkov -> Nil A:

NA>> Возможно, там где-то написано, что операции с сериальным
NA>> /dev/ttyUSB не thread-safe. А что тебе мешает в потоке номер 1
NA>> просто сделать slect()/poll()/epoll() на выбор и пиши/читай, и
NA>> делай после этого что тебе надо.

DS> Мешает отсутствие должной полноты знаний по IO в *NIX. Посмотрел маны
DS> на указанные вызовы - любопытно, спасибо! Буду копать в эту сторону.
DS> Завтра я не на работе, так что проверить смогу только послезавтра
DS> наверное... Будет время по RTFMмить ))

Там где должно быть написано, скорее всего даже что не thread-safe а как-то, типа один только дескриптор на /dev/ttyUSB, а иначе UB.

Дык, юниксы, они такие, там треды завезли только сильно после форков. А так весь IO обрабатывает я на select() (до 1024 дескрипторов, но и даже сегодня так уже писать не надо), либо современный epoll().

Best Regards, Nil
--- GoldED+/LNX 1.1.5
Ответить с цитированием
  #5  
Старый 30.11.2023, 15:50
Denis Sovkov
Guest
 
Сообщений: n/a
По умолчанию Непонятки с read и write

Denis Sovkov написал(а) к Nil A в Nov 23 14:43:42 по местному времени:


Нello Nil!

29 Nov 23 23:15, you wrote to me:

NA> Дык, юниксы, они такие, там треды завезли только сильно после форков.

Ну вот и у меня как раз pthread's ))

Denis


--- GoldED+/LNX 1.1.5-b20180707
Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 15:19. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot