下面的代码片段;基本上,我正在抓取活动的 vt 并针对该终端发出一个 ioctl KDGETLED 以获取 capslock/numlock/scrolllock 键的当前状态,并且无论锁定键的状态如何,我总是得到 result=0。
我已经在多个 Linux 机器上尝试过这个,所有运行 Ubuntu 的变体(例如 Mint)。我已经为 KDGETLED 命令尝试了其他 fd,例如“/dev/tty”、“/dev/console”、0 等。我遇到了与 KDGKBLED 相同的问题。其他人是否遇到同样的问题,我是否在做一些愚蠢的事情,我是否遇到了编写不佳的驱动程序,或者其他什么?
int fd;
vt_stat stat;
fd = open("/dev/tty0", O_RDONLY);
if (ioctl(fd, VT_GETSTATE, &stat) == -1) {
fprintf(stderr, "Error on VT_GETSTATE\n");
exit(1);
}
close(fd);
char tty[128];
sprintf(tty, "/dev/tty%d", stat.v_active);
printf("Query tty: %s\n", tty);
char result;
fd = open(tty, O_RDWR | O_NDELAY, 0);
if (ioctl(fd, KDGETLED, &result) == -1) {
fprintf(stderr, "Error on KDGETLED\n");
exit(1);
}
close(fd);
printf("LED flag state: %d\n", result);
提前感谢所有审查我的问题的人。