Как я могу прочитать ввод терминала на устройстве tty до появления новой строки? - PullRequest
2 голосов
/ 10 февраля 2012

Я читаю последовательное устройство, используя встроенный linux (angstrom), используя open (), tcget / setattr (), read (). Я могу читать и записывать данные просто отлично. Однако устройство, которое я читаю, отображает подсказку, которая не заканчивается новой строкой. Это означает, что я не могу прочитать приглашение до тех пор, пока я не заставлю устройство отправить какой-то другой вывод, в конце которого стоит символ новой строки. По сути, я знаю, что строка приглашения («COM3>») находится в буфере tty, ожидая, пока устройство отправит новую строку. read () не будет обращаться к строке приглашения «COM3>» до тех пор, пока не появится символ новой строки. Есть ли способ изменить силу read (), чтобы получить данные в буфере до появления новой строки?

Спасибо

Ответы [ 2 ]

3 голосов
/ 10 февраля 2012

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

Что вам, вероятно, нужно, это установить терминал в «сырой» режим с помощью cfmakeraw(), что будет (среди прочего)отключить канонический режим.

См. справочную страницу tcsetattr() для получения дополнительной информации.

0 голосов
/ 10 февраля 2012

Одним из преимуществ C является то, что есть сотня способов сделать что-нибудь.

Я бы не использовал ioctl, если бы это был я.

Хорошо бы сработать простой cMyChar = getc (STDIN).

...