C 如何在Unix中使用信号处理程序?
我正在学习信号。在下面的代码中,输入CTRL-C信号后,如何在while循环中继续打印提示。还有如何使用CTRL-D信号终止进程C 如何在Unix中使用信号处理程序?,c,unix,signals,C,Unix,Signals,我正在学习信号。在下面的代码中,输入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, N
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;
}
如何在unix中使用信号处理程序
阅读,最重要的是。适当使用,因为它是缓冲的
还有如何使用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;
}
但Ctrl D不是一个信号。看见当它是一个终端时,它会触发stdin上的文件结束条件。见和。要检测该文件结束状态,请参阅和
另见答案
您可能对使用
你应该读一本好书,比如(它很好地解释了信号)
Linux更友好,因为它可以用于多路复用系统调用,例如。您需要显示更多的代码(例如
sigint\u handler()
函数),并且您还需要使用更少的代码(使用int main(void)
,因为您不需要注意argc
或argv
)。不要忘记,默认情况下,标准输出将是行缓冲的。这意味着,在缓冲区被填满之前,您不会看到提示。此外,还要执行搜索。关于如何忽略和处理信号,存在着许多问题。甚至有一个问题与此几乎相同:。请注意中讨论的内容-也许这回答了您的问题?