다음과 같은 간단한 프로그램을 가정해 보겠습니다.
#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;
}
컴파일하고 init(커널이 호출하는 첫 번째 프로세스)로 만든 다음 다시 시작하면 결과가 나타납니다.
open() :No such device or address
이것을 어떻게 설명할 것인가?
답변1
/dev/tty
프로세스 제어 터미널에 대한 참조입니다. 그러나 제어 터미널을 가지려면 실제 터미널을 열어서 프로세스에 할당해야 합니다.
/dev/tty를 여는 대신 /dev/tty0, /dev/console 또는 /dev/tty1을 열어야 할 수도 있습니다.
프로세스에 제어 터미널이 없고 tty 또는 pty를 열면 해당 tty를 제어 터미널로 사용하는 다른 사람이 없으면 프로세스에 해당 tty가 제어 터미널로 할당됩니다. 조건이 올바르면 tty를 열고 IOCTL을 사용하여 이를 제어 터미널로 지정할 수도 있습니다.
그러나 /dev/tty는 실제 tty가 아니므로 이러한 조건이 적용되지 않습니다.
답변2
@ user110489의 답변이 저에게 효과적이었습니다.
당신이하고 싶은 것은 /dev/tty
으로 바꾸는 것입니다 /dev/console
.
내 시스템 구성:
OS - windows 10
IDE - VSCode
Error arrise in - husky hooks.