簡體   English   中英

不懂信號

[英]Don't understand signal

誰能告訴我這行的作用:

if(signal(SIGUSR1, handler) == (sighandler_t)-1)

這是我從練習中復制的一行,使它起作用,但我不太了解。 有人可以向我解釋嗎? (實際上是我不理解的第二部分:(sighandler_t)-1的值是什么?)

謝謝 :)

編輯:sighandler_t來自

typedef void (*sighandler_t)(int);

首先,這是一種不好的風格,可能是不可移植的代碼, (sighandler_t)-1應該替換為預定義的信號配置之一。 在我的系統上,它們以以下方式聲明

/* Fake signal functions.  */
#define SIG_ERR ((__sighandler_t) -1)       /* Error return.  */
#define SIG_DFL ((__sighandler_t) 0)        /* Default action.  */
#define SIG_IGN ((__sighandler_t) 1)        /* Ignore signal.  */

其他系統可能使用其他值,因此假設您使用相同的定義,我們將獲得下一個代碼:

if(signal(SIGUSR1, handler) == SIG_ERR) {
    /* got problem */
} else {
   /* handler installed */
}

此代碼將函數handler程序安裝為信號SIGUSR1 handler程序,並檢查返回的值以確保成功完成。 handler必須聲明為void handler(int signo);

(sighandler_t)-1是負數,將其轉換為sighandler_t類型。 您必須檢查信號呼叫是否失敗。

暫無
暫無

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

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