新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 進程間通信之:信號

        進程間通信之:信號

        作者: 時間:2013-09-13 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/257126.htm

        1.處理函數

        (1)函數說明。

        使用signal()函數處理時,只需要指出要處理的和處理函數即可。它主要是用于前32種非實時的處理,不支持信號傳遞信息,但是由于使用簡單、易于理解,因此也受到很多程序員的歡迎。

        還支持一個更健壯、更新的信號處理函數sigaction(),推薦使用該函數。

        (2)函數格式。

        signal()函數的語法要點如表8.11所示。

        表8.11 signal()函數語法要點

        所需頭文件

        #includesignal.h>

        函數原型

        void(*signal(intsignum,void(*handler)(int)))(int)

        函數傳入值

        signum:指定信號代碼

        handler:

        SIG_IGN:忽略該信號

        SIG_DFL:采用系統默認方式處理信號

        自定義的信號處理函數指針

        函數返回值

        成功:以前的信號處理配置

        出錯:-1

        這里需要對這個函數原型進行說明。這個函數原型有點復雜??上扔萌缦碌膖ypedef進行替換說明:

        typedefvoidsign(int);

        sign*signal(int,handler*);

        可見,首先該函數原型整體指向一個無返回值并且帶一個整型參數的函數指針,也就是信號的原始配置函數。接著該原型又帶有兩個參數,其中的第二個參數可以是用戶自定義的信號處理函數的函數指針。

        表8.12列舉了sigaction()的語法要點。

        表8.12 sigaction()函數語法要點

        所需頭文件

        #includesignal.h>

        函數原型

        intsigaction(intsignum,conststructsigaction*act,structsigaction*oldact)

        函數傳入值

        signum:信號代碼,可以為除SIGKILL及SIGSTOP外的任何一個特定有效的信號

        act:指向結構sigaction的一個實例的指針,指定對特定信號的處理

        oldact:保存原來對相應信號的處理

        函數返回值

        成功:0

        出錯:-1

        這里要說明的是sigaction()函數中第2個和第3個參數用到的sigaction結構。這是一個看似非常復雜的結構,希望讀者能夠慢慢閱讀此段內容。

        首先給出了sigaction的定義,如下所示:

        structsigaction

        {

        void(*sa_handler)(intsigno);

        sigset_tsa_mask;

        intsa_flags;

        void(*sa_restore)(void);

        }

        sa_handler是一個函數指針,指定信號處理函數,這里除可以是用戶自定義的處理函數外,還可以為SIG_DFL(采用缺省的處理方式)或SIG_IGN(忽略信號)。它的處理函數只有一個參數,即信號值。

        sa_mask是一個信號集,它可以指定在信號處理程序執行過程中哪些信號應當被屏蔽,在調用信號捕獲函數之前,該信號集要加入到信號的信號屏蔽字中。

        sa_flags中包含了許多標志位,是對信號進行處理的各個選擇項。它的常見可選值如表8.13所示。

        表8.13 常見信號的含義及其默認操作

        選項

        含義

        SA_NODEFERSA_NOMASK

        當捕捉到此信號時,在執行其信號捕捉函數時,系統不會自動屏蔽此信號

        SA_NOCLDSTOP

        進程忽略子進程產生的任何SIGSTOP、SIGTSTP、SIGTTIN和SIGTTOU信號

        SA_RESTART

        令重啟的系統調用起作用

        SA_ONESHOTSA_RESETHAND

        自定義信號只執行一次,在執行完畢后恢復信號的系統默認動作

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        模擬信號相關文章:什么是模擬信號


        linux相關文章:linux教程


        數字通信相關文章:數字通信原理


        通信相關文章:通信原理




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 信阳市| 望谟县| 陈巴尔虎旗| 阜新市| 云林县| 偃师市| 弥渡县| 东乡族自治县| 阳江市| 腾冲县| 特克斯县| 新竹县| 合山市| 华宁县| 施秉县| 织金县| 龙川县| 上林县| 罗源县| 宝应县| 高平市| 尼玛县| 松潘县| 丰城市| 隆化县| 宜宾市| 新巴尔虎左旗| 靖安县| 大埔区| 南乐县| 天水市| 汝州市| 岑巩县| 都兰县| 东至县| 河池市| 吉隆县| 类乌齐县| 孙吴县| 广昌县| 漳浦县|