gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:09:18 25 4
gpt4 key购买 nike

我有一段读取键盘输入的代码(用于调试目的),在 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 上启动 - 如果有人对此有更多了解,那就太好了)。

最佳答案

更新:事实证明,如果您在运行级别 3 上初始化当前 tty 设备,则它不起作用。初始化特定的 tty 设备(在本例中为 tty3)可以解决该问题。

不太确定为什么会出现这种情况(也许运行级别 3 上的默认 tty 是 X 窗口?),如果有人能解释为什么会发生这种情况,我将不胜感激。

关于运行级别 3 上的 C 非阻塞键盘输入 block (Linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59174675/

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