簡體   English   中英

在 ubuntu 中使用 sigaction() 實現 Signal()

[英]Implement Signal() using sigaction() in ubuntu

我正在編寫一個客戶端/服務器應用程序,其中客戶端提供文件名,然后服務器將其發送給客戶端,最后客戶端將保存它。

所以我想讓信號處理程序來處理父子之間的僵屍問題,所以這個信號代碼:

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.

那么如何解決這個問題呢?

您需要聲明Sigfunc ,因此在頭文件中放置如下內容:

typedef void (*Sigfunc)(int sig_no);

在你的頭文件中。

由於已經有一個名為signal的標准函數,您需要將函數命名為其他名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM