Porque você pode ter vários dispositivos de terminal.
Portanto, getty
é invocado com ttyS0
especificamente, como um parâmetro. Então, ele usa seu próprio código para inicializar todos os FDs. Isso acontece de forma diferente do código do kernel, que abre /dev/console
para init
. Pode-se supor que getty
abre a tty uma vez com O_RDWR
, então dup
licena o FD.
Eu posso ver uma razão óbvia para o código deste jeito. agetty
também pode ser chamado com -
significando stdin. Então, sempre usando dup()
é a implementação mais simples.
Não sei por que essa opção foi suportada. Não é necessariamente usado ou suportado em um sistema padrão V inittab
. Parece combinar com a abordagem mais antiga usada no BSD , onde init
passa pelo terminal dispositivo como um FD aberto em vez de um parâmetro A abordagem mais antiga é para init
inicializar todos os FDs (link , note apenas 2 FDs como stderr
foi adicionado na próxima versão).
Como a questão foi editada para especificar busybox, e cttyhack foi mencionado, a explicação óbvia no caso de busybox é "mantém o código menor". Este também foi um recurso de condução do código unix histórico.