Кто-нибудь знает, почему мне сначала нужно подключиться к устройству через экран?
Такое поведение почти всегда связано с неполной инициализацией termios вашей программой.
Идеальная программа сконфигурирует последовательный терминал для своих целей и при выходе восстановит конфигурацию termios обратно к тому, как она его нашла.
Но большинство программ, включая программы эмуляции терминала, такие как minicom и, по-видимому, screen , просто оставляют свою конфигурацию termios вместо ее восстановления.
К счастью для вас, эта оставшаяся конфигурация termios заполняет недостающие фрагменты, что позволяет вашей программе получить доступ к последовательному терминалу, как и ожидалось.
Проверка «вашего» кода предполагает, что он был скопирован из принятого ответа на этот вопрос . Судя по количеству голосов, этот код, по-видимому, работает для многих людей. Однако автор признает, что он был написан до стандартов POSIX, и поэтому код не должен считаться переносимым. Другими словами, ваш пробег может отличаться.
Очевидно, вы пропустили альтернативный ответ , который соответствует POSIX. В этой программе есть проверенная конфигурация termios для блокировки неканонического режима.
Если вы предпочитаете упростить использование макроса cfmakeraw () , то вот еще один пример кода .