运行级别3(Linux)上的C非阻塞键盘输入块

问题描述 投票:0回答:1

我有一段代码可读取键盘输入(用于调试目的),在Ubuntu 18.04上用C实现。由于其他进程必须在同一线程上运行,因此将其初始化为非阻塞。

[当我尝试在运行级别3上运行我的应用程序时,在尝试读取键盘字符时会阻塞。当我在运行级别5上运行应用程序时,不会发生此行为。

有人对这两个运行级别之间的行为为何不一致有任何答案吗?

这是代码(未显示:由应用程序的主循环调用读取操作):

#include <errno.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <termios.h>
#include <unistd.h>


static int fd;

int kbd_initModule()
{
    fd = open("/dev/tty", O_NONBLOCK | O_NOCTTY);

    if(fd < 0)
    {
        ERROR("Unable to open keyboard: %d", fd);
        return fd;
    }
    else
    {
        return 0;
    }
}

int kbd_deinitModule()
{
    close(fd);
    return 0;
}

int kbd_getEvent()
{
    uint8_t buf[1];

    int tmp = read(fd, buf, sizeof(buf));

    if(tmp == -1)
    {
        ERROR("%s", strerror(errno));
        return -1;
    }
    else
    {
        return buf[0];
    }
}

我可以回答任何问题并提供其他详细信息。

其他详细信息:

  • 启动应用:运行级别5:sudo ./app;运行级别3:sudo xinit ./app(应用程序中包含GUI组件,因此X服务器必须在运行级别3上启动-如果有人对此有所了解,那就更好了。)]

我有一段代码可读取键盘输入(用于调试目的),在Ubuntu 18.04上用C实现。由于其他进程必须在同一线程上运行,因此将其初始化为非...

c linux io ubuntu-18.04 tty
1个回答
0
投票

更新:

© www.soinside.com 2019 - 2024. All rights reserved.