在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);