gpt4 book ai didi

c - 在 SIGINT 之前打印消息

转载 作者:行者123 更新时间:2023-11-30 14:49:26 25 4
gpt4 key购买 nike

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

/* A signal handling function that simply prints
a message to standard error. */
void handler(int code) {
fprintf(stderr, "Signal %d caught\n", code);
}

int main() {
// Declare a struct to be used by the sigaction function:
struct sigaction newact;

// Specify that we want the handler function to handle the
// signal:
newact.sa_handler = handler;

// Use default flags:
newact.sa_flags = 0;

// Specify that we don't want any signals to be blocked during
// execution of handler:
sigemptyset(&newact.sa_mask);

// Modify the signal table so that handler is called when
// signal SIGINT is received:
sigaction(SIGINT, &newact, NULL);

// Keep the program executing long enough for users to send
// a signal:
int i = 0;

for (;;) {
if ((i++ % 50000000) == 0) {
fprintf(stderr, ".");
}
}

return 0;
}

当我按下 ctrl-c 时,我希望我的程序打印 "Signal %d catch\n" 消息,然后正常退出,就像按下 ctrl-c 时一样。

./测试................................^CSignal 2 已捕获......................^CSignal 2 已捕获........................................^Z[2]+ 已停止./test

现在它只是打印消息,但不会立即退出程序。

最佳答案

这是因为ctrl+c的默认行为是退出程序。但是通过使用sigaction(),您可以自己管理行为。因此,如果您希望程序结束,可以添加 exit() 调用。

void handler(int code) {
fprintf(stderr, "Signal %d caught\n", code);
exit(code);
}

关于c - 在 SIGINT 之前打印消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49593835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com