我有一个循环,不断从我的串口读取.循环是无限的,所以我知道停止程序的唯一方法是使用Ctrl+C.这个解决方案的问题,我怀疑也引起了其他问题,就是当我使用时Ctrl+C,我的程序突然结束.在程序结束时,我关闭了与我正在访问的串口的文件描述符的连接,但我认为我的程序没有达到那个因为我使用Ctrl+C命令,这只是停止程序的确切位置.
有没有办法让我创建无限的while循环,并在我想要的时候退出,但同时,保持执行它下面的代码的能力?
Art*_*Art 10
试试这个,看看会发生什么:
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
volatile sig_atomic_t stop;
void
inthand(int signum)
{
stop = 1;
}
int
main(int argc, char **argv)
{
signal(SIGINT, inthand);
while (!stop)
pause();
printf("exiting safely\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Ctrl-C向您的进程发送信号(SIGINT).该过程的默认操作是在获取它时退出,但您可以捕获信号并优雅地处理它.
你可以这样做:
sig_atomic_t volatile g_running = TRUE;
void sig_handler(int signum)
{
if (signum == SIGINT)
g_running = FALSE;
}
int main()
{
signal(SIGINT, &sig_handler);
while (g_running)
{
//your code
}
//cleanup code
}
Run Code Online (Sandbox Code Playgroud)
这将捕获SIGINT按CTRL-C生成的信号,并通过设置g_running为中断循环FALSE.然后执行清理代码