![为什么在第一个进程中打开/dev/tty时出现“No such device or address”?](https://linux22.com/image/202923/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%9C%A8%E7%AC%AC%E4%B8%80%E4%B8%AA%E8%BF%9B%E7%A8%8B%E4%B8%AD%E6%89%93%E5%BC%80%2Fdev%2Ftty%E6%97%B6%E5%87%BA%E7%8E%B0%E2%80%9CNo%20such%20device%20or%20address%E2%80%9D%EF%BC%9F.png)
假设一个简单的程序,如下:
#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.