为什么在第一个进程中打开/dev/tty时出现“No such device or address”?

为什么在第一个进程中打开/dev/tty时出现“No such device or address”?

假设一个简单的程序,如下:

#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/tty0 或 /dev/console 或 /dev/tty1 而不是打开 /dev/tty

如果一个进程没有控制终端,并且它打开一个 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.

相关内容