c - C 程序如何在 Linux 环境中同时执行其他操作的同时轮询用户输入?

标签 c linux

背景:

我是一个相对缺乏经验的开发人员,试图编写与 PCI 运动 Controller 接口(interface)的软件。我在 Ubuntu Linux 18.04 上使用 C(用 gcc 编译)。

我正在编写的程序需要定期检查运动 Controller 发送的未经请求的状态消息(大约每秒一次)并在终端屏幕上显示它找到的任何消息(为此我正在使用 ncurses 库)。

我有什么:

现在,为了做到这一点,我正在调用一个函数来检查 while 循环中的未经请求的消息。代码大致类似于:

while (1)
{
    // check for messages from PCI and store them in a traffic buffer
    checkForMessages(PCIconnection, trafficBuffer);

    // output the traffic buffer to the screen
    printf("%s", trafficBuffer);    
}

我需要什么:

我需要以允许他们结束循环的方式提示用户输入。例如,用户可以输入 end 导致循环停止,程序继续。

问题:

我不知道有什么方法可以在不将 fgets 放入 while 循环的情况下实现此目的,这会导致程序停止并等待用户在每次循环迭代中输入内容。

我一直在寻找解决方案,但一直找不到关于如何实现我需要的功能的讨论。打开一个新线程或进程似乎是朝着正确方向迈出的一步?

如果我目前所做的是糟糕的做法,我愿意完全重构我的代码。

感谢您的帮助!

最佳答案

您的任务需要 event loop基于selectepoll。它会等待的一个事件是用户输入 - 当 STDIN_FILENO 准备好读取时。另一个是当您需要轮询 Controller 时的 1 秒周期性计时器。

有很多库为您实现了事件循环,这样您就可以专注于需要处理哪些事件以及如何处理。 libevent是最古老、功能丰富和流行的一种。

关于c - C 程序如何在 Linux 环境中同时执行其他操作的同时轮询用户输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55660630/

相关文章:

mysql - 在perl中将csv上传到mysql

linux - 从脚本 B 调用脚本 A,并将脚本 A 的输出写入文件

你能在指向数组的指针中打印内容吗?

c++ - 将二维字符串数组传递给 C++ 中的函数

linux - 错误 : You are required to change your password immediately (root enforced)

linux - Nginx 上的 SSL 引发错误(SSL : error:0908F066:PEM routines:get_header_and_data:bad end line)

python - 错误号 32 : Broken pipe

c - 这种编码风格有什么优势吗?

c - 在数组 : Segmentation fault (core dumped) 中插入一个元素

c - 如何获取包含文件的底层挂载 block 设备?