新聞中心

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

        進程間通信之:信號

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

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

        2.alarm()和pause()

        (1)函數說明。

        alarm()也稱為鬧鐘函數,它可以在進程中設置一個定時器,當定時器指定的時間到時,它就向進程發送SIGALARM。要注意的是,一個進程只能有一個鬧鐘時間,如果在調用alarm()之前已設置過鬧鐘時間,則任何以前的鬧鐘時間都被新值所代替。

        pause()函數是用于將調用進程掛起直至捕捉到為止。這個函數很常用,通常可以用于判斷是否已到。

        (2)函數格式。

        表8.9列出了alarm()函數的語法要點。

        表8.9 alarm()函數語法要點

        所需頭文件

        #includeunistd.h>

        函數原型

        unsignedintalarm(unsignedintseconds)

        函數傳入值

        seconds:指定秒數,系統經過seconds秒之后向該進程發送SIGALRM信號

        函數返回值

        成功:如果調用此alarm()前,進程中已經設置了鬧鐘時間,則返回上一個鬧鐘時間的剩余時間,否則返回0

        出錯:-1

        表8.10列出了pause()函數的語法要點。

        表8.10 pause()函數語法要點

        所需頭文件

        #includeunistd.h>

        函數原型

        intpause(void)

        函數返回值

        -1,并且把error值設為EINTR

        (3)函數實例。

        該實例實際上已完成了一個簡單的sleep()函數的功能,由于SIGALARM默認的系統動作為終止該進程,因此程序在打印信息之前,就會被結束了。代碼如下所示:

        /*alarm_pause.c*/

        #includeunistd.h>

        #includestdio.h>

        #includestdlib.h>

        intmain()

        {

        /*調用alarm定時器函數*/

        intret=alarm(5);

        pause();

        printf(Ihavebeenwakenup.n,ret);/*此語句不會被執行*/

        }

        $./alarm_pause

        Alarmclock

        想一想

        用這種形式實現的sleep()功能有什么問題?

        8.3.3信號的處理

        在了解了信號的產生與捕獲之后,接下來就要對信號進行具體的操作了。從前面的信號概述中讀者也可以看到,特定的信號是與一定的進程相聯系的。也就是說,一個進程可以決定在該進程中需要對哪些信號進行什么樣的處理。例如,一個進程可以選擇忽略某些信號而只處理其他一些信號,另外,一個進程還可以選擇如何處理信號。總之,這些都是與特定的進程相聯系的。因此,首先就要建立進程與其信號之間的對應關系,這就是信號的處理。

        注意

        請讀者注意信號的注冊與信號的處理之間的區別,前者信號是主動方,而后者進程是主動方。信號的注冊是在進程選擇了特定信號處理之后特定信號的主動行為。

        信號處理的主要方法有兩種,一種是使用簡單的signal()函數,另一種是使用信號集函數組。下面分別介紹這兩種處理方式。

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

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


        linux相關文章:linux教程


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


        通信相關文章:通信原理




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 香港| 隆林| 张家界市| 高台县| 古田县| 哈巴河县| 扶余县| 雷州市| 荣成市| 武汉市| 浠水县| 布尔津县| 镇沅| 辽宁省| 积石山| 会理县| 淅川县| 通州区| 丽江市| 雅安市| 淄博市| 科尔| 四平市| 尼木县| 新兴县| 宁安市| 中宁县| 花垣县| 建平县| 伊吾县| 新安县| 永清县| 绍兴县| 牟定县| 游戏| 辽阳县| 五大连池市| 合阳县| 藁城市| 财经| 福贡县|