Как сделать функцию чтения не вешать?
-
25-09-2019 - |
Вопрос
Я использую 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») должен привести вас к правильному пути.