新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > linux操作系統(tǒng)下的進(jìn)程通信設(shè)計(jì)

        linux操作系統(tǒng)下的進(jìn)程通信設(shè)計(jì)

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


        4. 信號(hào)量


        信號(hào)量又稱為信號(hào)燈,它是用來(lái)協(xié)調(diào)不同間的數(shù)據(jù)對(duì)象的,而最主要的應(yīng)用是前一節(jié)的共享內(nèi)存方式的。本質(zhì)上,信號(hào)量是一個(gè)計(jì)數(shù)器,它用來(lái)記錄對(duì)某個(gè)資源(如共享內(nèi)存)的存取狀況。一般說(shuō)來(lái),為了獲得共享資源,需要執(zhí)行下列操作:

        (1) 測(cè)試控制該資源的信號(hào)量。

        (2) 若此信號(hào)量的值為正,則允許進(jìn)行使用該資源。進(jìn)程將進(jìn)號(hào)量減1。

        (3) 若此信號(hào)量為0,則該資源目前不可用,進(jìn)程進(jìn)入睡眠狀態(tài),直至信號(hào)量值大于0,進(jìn)程被喚醒,轉(zhuǎn)入步驟(1)。

        (4) 當(dāng)進(jìn)程不再使用一個(gè)信號(hào)量控制的資源時(shí),信號(hào)量值加1。如果此時(shí)有進(jìn)程正在睡眠等待此信號(hào)量,則喚醒此進(jìn)程。

        維護(hù)信號(hào)量狀態(tài)的是Linux內(nèi)核而不是用戶進(jìn)程。我們可以從頭文件/usr/src//include//sem.h中看到內(nèi)核用來(lái)維護(hù)信號(hào)量狀態(tài)的各個(gè)結(jié)構(gòu)的定義。信號(hào)量是一個(gè)數(shù)據(jù)集合,用戶可以單獨(dú)使用這一集合的每個(gè)元素。要調(diào)用的第一個(gè)函數(shù)是semget,用以獲得一個(gè)信號(hào)量ID。

        #include sys/types.h>

        #include sys/ipc.h>

        #include sys/sem.h>

        int semget(key_t key, int nsems, int flag);

        key是前面講過(guò)的IPC結(jié)構(gòu)的關(guān)鍵字,它將來(lái)決定是創(chuàng)建新的信號(hào)量集合,還是引用一個(gè)現(xiàn)有的信號(hào)量集合。nsems是該集合中的信號(hào)量數(shù)。如果是創(chuàng)建新集合(一般在服務(wù)器中),則必須指定nsems;如果是引用一個(gè)現(xiàn)有的信號(hào)量集合(一般在客戶機(jī)中)則將nsems指定為0。

        semctl函數(shù)用來(lái)對(duì)信號(hào)量進(jìn)行操作。

        int semctl(int semid, int semnum, int cmd, union semun arg);

        不同的操作是通過(guò)cmd參數(shù)來(lái)實(shí)現(xiàn)的,在頭文件sem.h中定義了7種不同的操作,實(shí)際編程時(shí)可以參照使用。

        semop函數(shù)自動(dòng)執(zhí)行信號(hào)量集合上的操作數(shù)組。

        int semop(int semid, struct sembuf semoparray[], size_t nops);

        semoparray是一個(gè)指針,它指向一個(gè)信號(hào)量操作數(shù)組。nops規(guī)定該數(shù)組中操作的數(shù)量。

        下面,我們看一個(gè)具體的例子,它創(chuàng)建一個(gè)特定的IPC結(jié)構(gòu)的關(guān)鍵字和一個(gè)信號(hào)量,建立此信號(hào)量的索引,修改索引指向的信號(hào)量的值,最后我們清除信號(hào)量。

        5.套接口

        套接口(socket)編程是實(shí)現(xiàn)Linux系統(tǒng)和其他大多數(shù)中進(jìn)程間的主要方式之一。我們熟知的WWW服務(wù)、FTP服務(wù)、TELNET服務(wù)等都是基于套接口編程來(lái)實(shí)現(xiàn)的。除了在異地的計(jì)算機(jī)進(jìn)程間以外,套接口同樣適用于本地同一臺(tái)計(jì)算機(jī)內(nèi)部的進(jìn)程間

        本文引用地址:http://www.104case.com/article/151304.htm
        linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

        上一頁(yè) 1 2 下一頁(yè)

        評(píng)論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 铜梁县| 灵宝市| 钟山县| 南投县| 垣曲县| 汤阴县| 大埔县| 白河县| 科尔| 繁峙县| 石家庄市| 临泉县| 正阳县| 泉州市| 钦州市| 咸丰县| 宝应县| 东光县| 科技| 原平市| 蓝田县| 株洲市| 客服| 峨眉山市| 石台县| 囊谦县| 柘城县| 银川市| 宣恩县| 阿图什市| 缙云县| 正安县| 太保市| 太湖县| 三台县| 阿合奇县| 天津市| 嘉善县| 汤原县| 隆回县| 金乡县|