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

jos*_*urm 13 c linux

背景:

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

我正在编写的程序需要定期检查运动控制器发送的未经请求的状态消息(大约每秒一次),并将其找到的任何消息显示在终端屏幕上(我正在使用该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);    
}
Run Code Online (Sandbox Code Playgroud)

我需要的:

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

问题:

我不知道有没有fgets在while循环中放进去,导致程序停止并等待用户在每次循环迭代中输入内容的方法。

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

如果我目前不擅长实践,我愿意完全重组我的代码。

感谢您的任何帮助!

Max*_*kin 13

您的任务需要基于或的事件循环。用户输入-等待读取时将等待的一个事件。另一个是需要轮询控制器的1秒定期计时器。selectepollSTDIN_FILENO

有很多库为您实现了事件循环,因此您可以专注于需要处理的事件以及如何处理。libevent是最古老的酒店之一,功能丰富且受欢迎。

  • 这样做的问题是,除非使用某种睡眠方式,否则您可能有一个占用100%cpu时间的繁忙等待循环,这会使大多数情况下对输入的响应不立即。select / poll或基于这些的库几乎可以肯定会减少不良副作用。 (4认同)