Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.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
在ubuntu中使用sigaction()实现Signal()_C_Unix_Network Programming_Signals_Handler - Fatal编程技术网

在ubuntu中使用sigaction()实现Signal()

在ubuntu中使用sigaction()实现Signal(),c,unix,network-programming,signals,handler,C,Unix,Network Programming,Signals,Handler,我正在编写一个客户机/服务器应用程序,其中客户机提供文件名,然后服务器将其发送给客户机,最后客户机将保存它 所以我想让信号处理器处理父级和子级之间的僵尸问题,所以信号的代码如下: Sigfunc * signal(int signo, Sigfunc *func) { struct sigaction act, oact; act.sa_handler = func; sigemptyset(&act.sa_mask); act.sa_flags

我正在编写一个客户机/服务器应用程序,其中客户机提供文件名,然后服务器将其发送给客户机,最后客户机将保存它

所以我想让信号处理器处理父级和子级之间的僵尸问题,所以信号的代码如下:

Sigfunc *
signal(int signo, Sigfunc *func)
{
    struct sigaction    act, oact;
 
    act.sa_handler = func;
    sigemptyset(&act.sa_mask);
    act.sa_flags = 0;
    if (signo == SIGALRM) {
#ifdef    SA_INTERRUPT
        act.sa_flags |= SA_INTERRUPT;    /* SunOS 4.x */
#endif
    } else {
#ifdef    SA_RESTART
        act.sa_flags |= SA_RESTART;        /* SVR4, 44BSD */
#endif
    }
    if (sigaction(signo, &act, &oact) < 0)
        return(SIG_ERR);
    return(oact.sa_handler);
}
/* end signal */

那么如何解决这个问题呢?

您需要声明
Sigfunc
,因此在头文件中放置类似的内容:

typedef void (*Sigfunc)(int sig_no);
在头文件中

由于已经有一个名为
signal
的标准函数,您需要将函数命名为其他函数。

缺少一些
#include
?这里(Fedora)你必须包括
,它是
signandler\t
,没有
Sigfunc
typedef void (*Sigfunc)(int sig_no);