cat повреждает данные последовательного порта

У меня есть приложение, которое записывает некоторые байты в последовательный порт. Когда я делаю cat /dev/ttyS0 чтобы увидеть, что передается, я обнаружил, что данные повреждены командой cat . Есть ли другой способ увидеть, что отправляется на последовательный порт?

Кто-нибудь знает, почему cat меняет данные?

Изменить . На другой стороне есть другое приложение, и я хочу перехватить данные, чтобы проверить его содержимое, но приложение должно продолжать работать.

3 Solutions collect form web for “cat повреждает данные последовательного порта”

Это не испорчено. Что происходит, так это то, что команда cat получает некоторые из байтов, и ваше приложение получает некоторые из них. Поэтому, когда вы запускаете cat , любые прочитанные им байты пропускаются приложением, и оба cat и приложение будут видеть (разные) частичные потоки, которые выглядят поврежденными.

Вы уверены, что данные не повреждены вашим терминалом (или везде, где отображается кошка)? cat вряд ли испортит ваши данные.

Попробуйте использовать od (восьмеричный дамп), чтобы сбрасывать данные, поступающие из последовательного порта, чтобы вы могли точно видеть, что происходит (не полагаясь на то, что оно печатается). Используйте od -c если вы ожидаете данные ASCII.

Если вы все еще видите коррупцию, возможно, ваш последовательный порт настроен неправильно? Попробуйте setserial и stty чтобы узнать, могут ли они лучше настроить ситуацию.

cat не изменяет данные. Могут быть старые системы Unix, где он обрезает строки, содержащие нулевые байты, но не Linux, и я думаю, что не существует современной унифицированной системы.

С другой стороны, если вы попытаетесь отобразить двоичные данные непосредственно на вашем терминале, терминал интерпретирует управляющие символы как команды для управления дисплеем. Для этого нужны контрольные символы. Если вы хотите увидеть печатное представление необработанных данных, у вас есть несколько решений:

  • Запустите cat -A , который будет печатать читаемое, но неоднозначное представление управляющих символов (например, ^A может быть байтом 0x01 или двухбайтовой последовательностью 0x5e 0x41).
  • Запустите hexdump -C , od -t x1 или какую-нибудь другую шестнадцатеричную дамп-программу (или восьмеричную дамп, если хотите).
  • Запустите less /dev/ttyS0 и нажмите F чтобы прочитать некоторые данные, затем нажмите Ctrl+C чтобы просмотреть его. Внутри меньше, введите -r для переключения между необработанным отображением управляющих символов и печатаемым представлением.

Обратите внимание, что чтение /dev/ttyS0 показывает, что получает ваш последовательный порт, а не то, что отправлено через него. Если вы этого хотите, загляните в приложение, которое написано, например, с strace или отладчиком.

  • Почему существует разница между последними и последними коммандными записями и почему в записи последних записей нет последней записи входа для пользователя?
  • Является ли PTTY внутри ядра или пользовательского пространства?
  • Если символ EOF обрабатывается при отправке через telnet-соединение
  • Как запретить ядро ​​или любые широковещательные сообщения наводнения TTY?
  • Могу ли я изменить шрифт терминала?
  • Измените количество сгенерированных устройств / dev / tty
  • Получить ssh для пересылки сигналов
  • Как я могу жить - измените строки и столбцы TTY?
  • Что такое буфер прокрутки и прокрутки?
  • Вывод на экран на ARM Mini2440. В настоящее время просто приглашение для входа
  • ERROR: init: ttyS0 (/ dev / ttyS0) основной процесс (1612), завершенный статусом 1
  • sudo askpass: спросить у другого tty
  • Linux и Unix - лучшая ОС в мире.