给定一个简单的程序,如下:
#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
这要怎么解释?
/dev/tty
是对进程控制终端的引用。但是为了让它有一个控制终端,一个真实的终端必须打开并分配给进程。也许您应该打开 /dev/tty0 或 /dev/console 或 /dev/tty1 而不是打开 /dev/tty
如果一个进程没有控制终端,并且它打开了一个 tty 或 pty,如果没有其他东西已经将该 tty 用作控制终端,那么该进程将被分配该 tty 作为控制终端。如果条件正确,也可以打开一个 tty 并将其分配为具有 IOCTL 的控制终端。
但是 /dev/tty 不是真正的 tty,因此这些条件不适用于它。
@user110489 的回答对我有用。
您要做的就是将 替换
/dev/tty
为/dev/console
。我的系统配置: