色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 進(jìn)程間通信之:信號(hào)

          進(jìn)程間通信之:信號(hào)

          作者: 時(shí)間:2013-09-13 來(lái)源:網(wǎng)絡(luò) 收藏

          本文引用地址:http://cafeforensic.com/article/257126.htm

          1.處理函數(shù)

          (1)函數(shù)說(shuō)明。

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

          還支持一個(gè)更健壯、更新的信號(hào)處理函數(shù)sigaction(),推薦使用該函數(shù)。

          (2)函數(shù)格式。

          signal()函數(shù)的語(yǔ)法要點(diǎn)如表8.11所示。

          表8.11 signal()函數(shù)語(yǔ)法要點(diǎn)

          所需頭文件

          #includesignal.h>

          函數(shù)原型

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

          函數(shù)傳入值

          signum:指定信號(hào)代碼

          handler:

          SIG_IGN:忽略該信號(hào)

          SIG_DFL:采用系統(tǒng)默認(rèn)方式處理信號(hào)

          自定義的信號(hào)處理函數(shù)指針

          函數(shù)返回值

          成功:以前的信號(hào)處理配置

          出錯(cuò):-1

          這里需要對(duì)這個(gè)函數(shù)原型進(jìn)行說(shuō)明。這個(gè)函數(shù)原型有點(diǎn)復(fù)雜??上扔萌缦碌膖ypedef進(jìn)行替換說(shuō)明:

          typedefvoidsign(int);

          sign*signal(int,handler*);

          可見(jiàn),首先該函數(shù)原型整體指向一個(gè)無(wú)返回值并且?guī)б粋€(gè)整型參數(shù)的函數(shù)指針,也就是信號(hào)的原始配置函數(shù)。接著該原型又帶有兩個(gè)參數(shù),其中的第二個(gè)參數(shù)可以是用戶自定義的信號(hào)處理函數(shù)的函數(shù)指針。

          表8.12列舉了sigaction()的語(yǔ)法要點(diǎn)。

          表8.12 sigaction()函數(shù)語(yǔ)法要點(diǎn)

          所需頭文件

          #includesignal.h>

          函數(shù)原型

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

          函數(shù)傳入值

          signum:信號(hào)代碼,可以為除SIGKILL及SIGSTOP外的任何一個(gè)特定有效的信號(hào)

          act:指向結(jié)構(gòu)sigaction的一個(gè)實(shí)例的指針,指定對(duì)特定信號(hào)的處理

          oldact:保存原來(lái)對(duì)相應(yīng)信號(hào)的處理

          函數(shù)返回值

          成功:0

          出錯(cuò):-1

          這里要說(shuō)明的是sigaction()函數(shù)中第2個(gè)和第3個(gè)參數(shù)用到的sigaction結(jié)構(gòu)。這是一個(gè)看似非常復(fù)雜的結(jié)構(gòu),希望讀者能夠慢慢閱讀此段內(nèi)容。

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

          structsigaction

          {

          void(*sa_handler)(intsigno);

          sigset_tsa_mask;

          intsa_flags;

          void(*sa_restore)(void);

          }

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

          sa_mask是一個(gè)信號(hào)集,它可以指定在信號(hào)處理程序執(zhí)行過(guò)程中哪些信號(hào)應(yīng)當(dāng)被屏蔽,在調(diào)用信號(hào)捕獲函數(shù)之前,該信號(hào)集要加入到信號(hào)的信號(hào)屏蔽字中。

          sa_flags中包含了許多標(biāo)志位,是對(duì)信號(hào)進(jìn)行處理的各個(gè)選擇項(xiàng)。它的常見(jiàn)可選值如表8.13所示。

          表8.13 常見(jiàn)信號(hào)的含義及其默認(rèn)操作

          選項(xiàng)

          含義

          SA_NODEFERSA_NOMASK

          當(dāng)捕捉到此信號(hào)時(shí),在執(zhí)行其信號(hào)捕捉函數(shù)時(shí),系統(tǒng)不會(huì)自動(dòng)屏蔽此信號(hào)

          SA_NOCLDSTOP

          進(jìn)程忽略子進(jìn)程產(chǎn)生的任何SIGSTOP、SIGTSTP、SIGTTIN和SIGTTOU信號(hào)

          SA_RESTART

          令重啟的系統(tǒng)調(diào)用起作用

          SA_ONESHOTSA_RESETHAND

          自定義信號(hào)只執(zhí)行一次,在執(zhí)行完畢后恢復(fù)信號(hào)的系統(tǒng)默認(rèn)動(dòng)作

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

          模擬信號(hào)相關(guān)文章:什么是模擬信號(hào)


          linux相關(guān)文章:linux教程


          數(shù)字通信相關(guān)文章:數(shù)字通信原理


          通信相關(guān)文章:通信原理




          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉