Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在Unix中使用信号处理程序?_C_Unix_Signals - Fatal编程技术网

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

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

我正在学习信号。在下面的代码中,输入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;
}
如何在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
)。不要忘记,默认情况下,标准输出将是行缓冲的。这意味着,在缓冲区被填满之前,您不会看到提示。此外,还要执行搜索。关于如何忽略和处理信号,存在着许多问题。甚至有一个问题与此几乎相同:。请注意中讨论的内容-也许这回答了您的问题?