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

时间:2013-03-22 21:14:26

标签: c unix network-programming signals handler

我编程客户端/服务器应用程序,客户端提供文件名,然后服务器将其发送到客户端,然后客户端将保存它..

所以我想制作信号处理程序来处理父子之间的僵尸问题所以这个代码用于信号:

enter code here

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 */

The filename is : myHeader.h
and the error when compile the file is :

gcc -Wall -I/home/zmhnk/Desktop/ -o "myHeader" "myHeader.h" (in directory: /home/zmhnk/Desktop)
myHeader.h:281:1: error: unknown type name ‘Sigfunc’
myHeader.h:282:19: error: unknown type name ‘Sigfunc’
Compilation failed.

so how to solve this problem ???

1 个答案:

答案 0 :(得分:1)

您需要声明Sigfunc,因此请在头文件中添加以下内容:

typedef void (*Sigfunc)(int sig_no);

在你的头文件中。

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