gpt4 book ai didi

Linux (Ubuntu) ioctl KDGETLED/KDGKBLED 始终为 0

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:04:33 26 4
gpt4 key购买 nike

下面的代码片段;基本上,我正在获取事件 vt 并针对 capslock/numlock/scrolllock 键的当前状态针对该终端发出 ioctl KDGETLED,并且无论锁定键的状态如何,我总是得到 result=0。

我已经在多个 Linux 机器上尝试过这个,所有机器都运行 Ubuntu 的变体(例如 Mint)。我已经为 KDGETLED 命令尝试了其他 fds,例如“/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);

提前感谢所有审阅我的问题的人。

最佳答案

检查驱动程序代码,尤其是该驱动程序的 struct file_operations 实例,并检查分配给 .ioctl 成员的函数 - 如果编码不当(我'我已经看到 ioctls 中发生了很多糟糕的事情)那么这绝对是你的问题。

在这种情况下,我很确定这是驱动程序的错误。只要 ioctl 命令没有显示编译错误,一切——尤其是错误处理和输入检查——都是驱动程序的任务。

关于Linux (Ubuntu) ioctl KDGETLED/KDGKBLED 始终为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15314315/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com