2

我有一个控制台服务器,它监听客户端并执行他们需要的操作。但有时我需要终端服务器,但我不知道如何正确地做到这一点。因为我可以按 ctrl+c 来结束程序,但是我需要在循环之后执行重要的代码。

main_function(){
    while(true){
        listen();
    }
    do_something_important();
}

我可以从控制台捕获一些信号并运行函数来做重要的事情并正确结束吗?

end_program(){
    do_something_important();
    return 0;
}

或者在我的情况下我能做的最好的方法是什么?

4

2 回答 2

4

使用像 Pragmateek 描述的信号,但确保只在信号处理程序中设置一个标志(如 exitnow = true),并在主循环中检查这个标志。信号可能会在代码中的任何位置中断您的主程序,因此如果您想确保您的逻辑不会被随机中断或缩短,请使用信号处理程序来设置标志。

于 2013-06-23T14:25:02.183 回答
3

你可以使用信号:

#include <signal.h>
#include <stdio.h>
#include <stdlib.h>

static void on_close(int signal)
{
    puts("Cleaning up...");
    exit(EXIT_SUCCESS);
}

int main(void)
{
    signal(SIGINT, on_close);

    while (1)
    {
    }

    return EXIT_SUCCESS;
}
于 2013-06-23T14:15:47.057 回答