下面的代碼片段;基本上,我抓住活動vt並針對當前狀態的capslock/numlock/scrolllock鍵發出一個針對該終端的ioctl KDGETLED,並且無論鎖定鍵的狀態如何,我總是得到result = 0。Linux(Ubuntu)ioctl KDGETLED/KDGKBLED始終爲0
我試過在多個Linux機器上運行Ubuntu的所有變種(例如Mint)。我已經嘗試了其他的fds for KDGETLED命令,如「/ 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);
感謝,提前,所有誰審查我的問題。