Как сделать так, чтобы функция чтения не зависала? - PullRequest
1 голос
/ 23 октября 2010

Я использую socat для создания виртуального последовательного порта с:

socat PTY,link=/dev/ttySV0,echo=1 PTY,link=/dev/ttySV1,echo=1

В моей программе, написанной на C ++, я открываю порт ttySV1 и начинаю читать.

Функция чтения через некоторое время, но проблема в том, что функция чтения зависает, пока я не отправлю данные в порт. Вы знаете, как заставить функцию taht не зависать и просто завершать работу, если в буфере нет данных?

РЕДАКТИРОВАТЬ: я отправляю данные в порт, используя:

echo [data] > /dev/ttySV0

Ответы [ 2 ]

2 голосов
/ 23 октября 2010

Вы также можете использовать функцию чтения системы в зависимости от используемой операционной системы.Подробности должны быть прочитаны man (3).

Вы должны установить O_NONBLOCK, используя fnctlЭто должно привести к сбою чтения, если канал / FIFO в данный момент пуст.Я проверил справочные страницы для Linux, но в большинстве систем на основе POSIX их поведение должно быть схожим.

1 голос
/ 23 октября 2010

Один из способов - использовать метод select (), чтобы проверить, есть ли данные для чтения. Это или что-то еще найденное в Google (я искал "bsd sockets select") должно привести вас по правильному пути.

...