Вопрос

Я использую SOCAT, чтобы создать виртуальный последовательный порт с:

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

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

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

Редактировать: я отправляю данные в порт, используя:

echo [data] > /dev/ttySV0
Это было полезно?

Решение

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

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

Другие советы

Один из способов - использовать метод Select (), чтобы увидеть, если есть данные для чтения. Этот или что-то еще, найденное в Google (я искал «Выбор сокетов BSD») должен привести вас к правильному пути.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top