Dado que um programa simples, como segue:
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, char **argv)
{
int fd = -1;
if (access("/dev/tty", F_OK) == 0)
{
fd = open("/dev/tty", O_RDWR);
if (fd == -1)
perror("open() :");
}
return 0;
}
compile e faça como init (o primeiro processo invocado pelo kernel), depois reinicie, mas obteria o resultado:
open() :No such device or address
Como explicar isso?
/dev/tty
é uma referência ao terminal de controle para um processo. Mas para que ele tenha um terminal de controle, um terminal real deve ser aberto e atribuído ao processo.Talvez em vez de abrir /dev/tty você deva abrir /dev/tty0 ou /dev/console ou /dev/tty1
Se um processo não tiver um terminal de controle e abrir um tty ou pty, se nada mais estiver usando esse tty como um terminal de controle, então o processo será atribuído a esse tty como um terminal de controle. Também é possível abrir um tty e atribuí-lo como terminal de controle com um IOCTL se as condições estiverem corretas.
No entanto, /dev/tty não é um tty real, portanto, essas condições não se aplicam a ele.
A resposta de @ user110489 funciona para mim.
O que você precisa fazer é substituir o
/dev/tty
por/dev/console
.Configurações do meu sistema: