gpt4 book ai didi

c - 如何在 Unix 中使用信号处理程序?

转载 作者:行者123 更新时间:2023-11-30 19:25:10 27 4
gpt4 key购买 nike

我正在学习信号。在下面的代码中,输入 CTRL-C 信号后如何在 while 循环内继续打印提示。以及如何使用 CTRL-D 信号终止进程。

int main(int argc, char *argv[]){  

struct sigaction sh;
sh.sa_handler = sigint_handler;
sigemptyset(&sh.sa_mask);
sh.sa_flags = 0;
sigaction(SIGINT, &sh, NULL);

while(1)
{
printf("Some prompt: ");
}
return 0;
}

最佳答案

How to use signal handler in unix?

阅读signal(7)最重要的是signal-safety(7) 。使用fflush(3)适本地,因为 stdio(3)已缓冲。

Also how to terminate the process with the CTRL-D signal.

但是Ctrl D不是一个信号。请参阅stty(1) 。当 stdin 是终端时,它会触发 stdin 上的文件结束条件。请参阅isatty(3)pty(7) 。要检测文件结束条件,请参阅 read(2)feof(3) .

另请参阅this回答。

您可能有兴趣使用readline(3) .

你应该读一本好书,比如Advanced Linux Programming (它很好地解释了信号)然后 syscalls(2) .

Linux 有 signalfd(2) ,与 event loops 更加友好因为可用于多路复用系统调用,例如 poll(2) .

关于c - 如何在 Unix 中使用信号处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59206451/

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