我正在读wayland/weston代码,设置tty部分。我发现它试图获得一个可用的tty来完成KMS并启动Windows。如何打开/ dev/console在C
这是怎么回事呢:
if (!wl->new_user) {
wl->tty = STDIN_FILENO;
} else if (tty) {
t = ttyname(STDIN_FILENO);
if (t && strcmp(t, tty) == 0)
wl->tty = STDIN_FILENO;
else
wl->tty = open(tty, O_RDWR | O_NOCTTY);
} else {
int tty0 = open("/dev/tty0", O_WRONLY | O_CLOEXEC);
char filename[16];
if (tty0 < 0)
error(1, errno, "could not open tty0");
if (ioctl(tty0, VT_OPENQRY, &wl->ttynr) < 0 || wl->ttynr == -1)
error(1, errno, "failed to find non-opened console");
snprintf(filename, sizeof filename, "/dev/tty%d", wl->ttynr);
wl->tty = open(filename, O_RDWR | O_NOCTTY);
close(tty0);
}
在SRC /韦斯顿launch.c。
它试图打开('/ dev/tty0')并找到一个可用的tty,如果没有指定tty的话。
但是你不能这么做,'/ dev/tty0'和'available tty'都不属于你。我用我的简单版本进行了测试。当然,我无法打开'/ dev/tty0'。
你们知道这个魔法是如何完成的吗?感谢您的帮助:)
但我可以通过'ioctl(fd,VT_OPENQRY,#)知道一个可用的tty'。如果我无法控制终端,为什么linux提供这个ioctl? – Xeechem
您可以读取和写入的任何tty都是“可用的”。示例代码假设它是一个特定的名称 - 这看起来很奇怪,因为大多数系统最终使用至少两个字符,而不是单个字符。 –
顺便说一句,我怎么才能知道当前tty除了'ttyname(STDIN_FILENO)' – Xeechem