связь между печатью пользовательского пространства, консолью и tty

Я уже задавал вопрос о печати из пользовательского пространства на какой-то нетрадиционный последовательный порт. нестандартная последовательная консоль Linux

Однако я понял, что немного запутался в архитектуре печати пользовательского пространства.

  1. Куда пользовательское пространство printf отправляет свои данные? Я вижу, что stdout/stdin символически связаны с одним из tty/pty? Но кто устанавливает эту связь?
  2. Как tty подключается к доступным консолям? Или скажем: как tty core взаимодействует с консолью?

person agent.smith    schedule 14.02.2012    source источник


Ответы (2)


printf() записывает в stdout, который представляет собой FILE *, обертывающий файловый дескриптор 1. Файловые дескрипторы либо наследуются от родителя, либо открываются явно. Если вы будете следовать вверх по иерархии процессов в типичной системе, вы в конце концов придете к процессу login, который обычно порождается процессом *getty. Процесс getty подключается к терминалу с соответствующими настройками (скорость линии, четность, ... на последовательных линиях) и обычно порождает login при первой клавише / клавише ENTER. gettys обычно запускаются непосредственно из /etc/inittab в традиционных системах инициализации.

person ninjalj    schedule 15.02.2012

printf использует внутри себя системный вызов write() и записывает в файловый дескриптор 1, который связан с файлом устройства tty.

Ссылка, о которой вы говорите, устанавливается ядром.

person mikithskegg    schedule 14.02.2012
comment
Обряд. Однако я хочу узнать, какой это tty? Как ядро ​​​​решает, какой tty использовать? Это настраиваемый параметр. Могу ли я узнать, прежде чем скомпилировать ядро. - person agent.smith; 15.02.2012
comment
К сожалению, я недостаточно хорошо знаю внутренности ядра, чтобы ответить на ваш вопрос. Просмотрите специальную литературу по ядру - person mikithskegg; 15.02.2012