如何在守护进程中使用 ioctl?

How do I use ioctl in a daemon?

我按照这个 link 在 Linux 中创建了一个守护进程。它工作正常,直到我开始调用 ioctl。似乎对 ioctl 的任何调用都被完全忽略了。我正在使用 ioctl 来设置终端和键盘模式。示例代码如下。该代码在没有 运行 作为守护程序的情况下工作。我是否必须执行其他操作才能使 ioctl 正常工作?

int main(int argc, char **argv)
{
    skeleton_daemon(); // Function is the exact same as in the link
    int term = open("/dev/tty1", O_RDWR);

    syslog(LOG_NOTICE, "First daemon started.");
    sleep(5);
    

    // Should freeze the terminal and keyboard input but doesn't when running as daemon
    ioctl(term, KDSETMODE, KD_GRAPHICS);
    ioctl(term, KDSKBMODE, K_OFF);
    ioctl(term, 0x4B51, 1);

    sleep(5);

    ioctl(term, KDSETMODE, KD_TEXT);
    ioctl(term, KDSKBMODE, previousMode);
    ioctl(term, 0x4B51, 0);

    syslog(LOG_NOTICE, "First daemon terminated.");
    closelog();
    return EXIT_SUCCESS;
}

守护进程没有控制终端(或者根本没有 a 终端),并且它们的标准输入通常从 /dev/null 重定向。它们的标准输出和标准错误要么重定向到 /dev/null,要么重定向到日志文件。

即使守护进程有一个终端,那些 ioctl 也只会影响那个终端,而不会影响其他用户。