Tag: sigint

如何在SIGINT处理程序中清理本地数据

我需要在SIGINT处理程序中执行清理函数,但我无法将本地数据传递给它。 这是一个例子: int main(int argc, char *argv[]) { struct database *db = db_cursor(); sockfd_t master_socket = init_server(); signal(SIGINT, sigint_handler); while (1) { // accepting connections } } void sigint_handler(int s) { destroy_db(db); shutdown(master_socket, SHUT_RDWR); close(master_socket); exit(EXIT_SUCCESS); } 我该如何实现这种行为? 我试过让这个变量是全局的,但我不能在编译时调用这个函数(错误:初始化元素不是编译时常量)。

Readline:获取SIGINT的新提示

我使用readline获得了类似于以下的代码: #include #include #include #include #include #include #include #include #include void handle_signals(int signo) { if (signo == SIGINT) { printf(“You pressed Ctrl+C\n”); } } int main (int argc, char **argv) { //printf(“path is: %s\n”, path_string); char * input; char * shell_prompt = “i-shell> “; if (signal(SIGINT, handle_signals) == SIG_ERR) { printf(“failed to register interrupts with […]

在multithreading程序中捕获SIGINT

我正在编写一个multithreading程序,我想从用户处理一个可能的Ctrl-C命令来终止执行。 据我所知,无法保证能够取消每个工作线程的主线程将捕获信号。 因此,是否有必要对工作线程的代码使用不同的信号处理程序,以便任何人在信号到达时捕获信号,或者是否有另一种方法通过仅在主线程的代码中使用信号处理程序来执行此操作?