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

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

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

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

  • Создание терминального устройства для межпроцессного взаимодействия
  • ^ @ спам в tty (но, похоже, общесистемный)
  • Как обмен данными терминалом и оболочкой?
  • Можно использовать экран через ssh без -t?
  • Как я могу подключиться к выходу одного терминала с другого терминала?
  • Подключите два устройства ttySx на одном компьютере
  • как копировать файлы с помощью TTY-файла с одного компьютера на другой, подключенного через ту же домашнюю сеть
  • socat - регистрация и перенаправление UART
  • 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 или отладчиком.

    Linux и Unix - лучшая ОС в мире.