【问题标题】:Implement Signal() using sigaction() in ubuntu在 ubuntu 中使用 sigaction() 实现 Signal()
【发布时间】:2013-03-12 21:02:33
【问题描述】:

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

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

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

文件名为myHeader.h 编译文件时的错误是:

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.

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

【问题讨论】:

  • 缺少一些#include?在这里(Fedora)你必须包含&lt;signal.h&gt;,它是sighandler_t,看不到Sigfunc

标签: c unix network-programming signals handler


【解决方案1】:

你需要声明Sigfunc,所以在你的头文件中放置这样的东西:

typedef void (*Sigfunc)(int sig_no);

在你的头文件中。

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

【讨论】:

    猜你喜欢
    • 2016-12-21
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多