【发布时间】:2015-05-17 08:44:04
【问题描述】:
我正在阅读 Wayland/weston 代码,即设置 tty 部分。我发现它试图获取一个可用的 tty 来执行 KMS 并启动 windows。
它是这样做的:
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/weston-launch.c.
它会尝试open('/dev/tty0') 并在未指定 tty 时找到可用的 tty。
但你不能那样做,/dev/tty0 和 'available tty' 都不属于你。我用我更简单的版本进行了测试。当然我打不开/dev/tty0。
你们知道这个魔法是怎么做到的吗?
【问题讨论】: