[英]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.