亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        linux下多值信號(hào)量的操作探討

        2017-04-01 17:32:27許豪單平平
        關(guān)鍵詞:信號(hào)量操作

        許豪++單平平

        摘要:本文簡(jiǎn)單介紹了Linux下信號(hào)量通信機(jī)制的發(fā)展歷史,信號(hào)量通信的特點(diǎn),主要針對(duì)信號(hào)量的操作進(jìn)行分析,其中包括創(chuàng)建信號(hào)量集合,修改信號(hào)量集合中某個(gè)信號(hào)量的值,如何獲得信號(hào)量集合中某個(gè)信號(hào)量的值。文章最后給出多值信號(hào)量操作的實(shí)例,并且指出多值信號(hào)量操作時(shí)應(yīng)該關(guān)注的重點(diǎn)問(wèn)題。

        關(guān)鍵詞:信號(hào)量 進(jìn)程間通信 操作

        中圖分類號(hào):TP368.1 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2016)10-0240-01

        1 Linux信號(hào)量通信機(jī)制發(fā)展史

        Linux操作系統(tǒng)中有多種進(jìn)程間通信方式。本文主要圍繞信號(hào)量這種進(jìn)程間通信方式進(jìn)行闡述。信號(hào)量的概念最早由荷蘭學(xué)者Edsger Dijkstra于1965年提出,目前已經(jīng)發(fā)展成一種卓有成效的進(jìn)程間通信機(jī)制。通過(guò)該機(jī)制可以有效的控制兩個(gè)進(jìn)程對(duì)共享資源的同步訪問(wèn)操作。

        2 Linux單值信號(hào)量的操作

        當(dāng)信號(hào)量集合中只有一個(gè)信號(hào)量的時(shí)候,可以直接調(diào)用函數(shù)semop(int semid, struct sembuf *opsptr, size_t nops)來(lái)完成操作。其中第一個(gè)參數(shù)semid是信號(hào)量集合的標(biāo)識(shí)符,即semget函數(shù)執(zhí)行成功后的返回值;第二個(gè)參數(shù)opsptr比較復(fù)雜,是struct sembuf類型的結(jié)構(gòu)體,該結(jié)構(gòu)體與我們對(duì)信號(hào)量的操作緊密相關(guān)。結(jié)構(gòu)體原型為struct sembuf {short sem_num; short sem_op; short sem_flg; };有三個(gè)屬性,第一個(gè)屬性sem_num為信號(hào)量在信號(hào)量集合中的編號(hào);第二個(gè)屬性sem_op為當(dāng)前信號(hào)量需要改變的值,如果該屬性為正值,則在當(dāng)前信號(hào)量基礎(chǔ)之上增加sem_op,如果該屬性為負(fù)值,則在當(dāng)前信號(hào)量值的基礎(chǔ)上減去sem_op,第三個(gè)屬性為標(biāo)志位,當(dāng)取值為SEM_UNDO時(shí),表示進(jìn)程結(jié)束后由內(nèi)核釋放信號(hào)量發(fā)生改變的值。semop函數(shù)中的第三個(gè)參數(shù)表示對(duì)該信號(hào)量操作的次數(shù)。如果對(duì)該信號(hào)量操作一次,則參數(shù)nops取值為”1”,如果要操作兩次,則該參數(shù)取值為”2”。如果要對(duì)某個(gè)信號(hào)量做多次操作的時(shí)候,需要把相關(guān)的操作封裝到struct sembuf類型的數(shù)組中,即定義一個(gè)數(shù)組struct sembuf opbuf[2],然后對(duì)數(shù)組進(jìn)行賦值opbuf[0].sem_num=0;opbuf[0].sem_op=1;opbuf[0].sem_flg=IPC_NOWAIT,這些數(shù)值表示對(duì)信號(hào)量集合中的第一個(gè)信號(hào)量進(jìn)行加”1”操作,因?yàn)樾枰獙?duì)該信號(hào)量進(jìn)行兩次操作,所以還需要對(duì)數(shù)組opbuf中的第二個(gè)元素進(jìn)行賦值操作,即opbuf[1].sem_num=0;opbuf[1].sem_op=1;opbuf[1].sem_flg=IPC_NOWAIT。表示對(duì)信號(hào)量集合中的第一個(gè)信號(hào)量再次做加”1”操作。此時(shí)參數(shù)opstr取值為opbuf。

        Semctl函數(shù)用來(lái)對(duì)信號(hào)量集合的屬性進(jìn)行操作。原型為semctl(int semid,int semnum,int cmd,../* union semun arg */);第一個(gè)參數(shù)semid為信號(hào)量集標(biāo)識(shí)符,即semget的返回值,第二個(gè)參數(shù)semnum對(duì)應(yīng)信號(hào)量在信號(hào)集合中的編號(hào),第三個(gè)參數(shù)cmd是需要我們關(guān)注的參數(shù),該參數(shù)與semctl函數(shù)完成的功能緊密相關(guān),第四個(gè)參數(shù)是一個(gè)聯(lián)合類型的變量,該變量中的值主要根據(jù)參數(shù)cmd的變化而發(fā)生改變。如果要得到單個(gè)信號(hào)量集合中的信號(hào)量的值,只需要給參數(shù)cmd賦值為GETVAL即可,此時(shí),完全可以把第四個(gè)參數(shù)忽略掉。int semValue1=semctl(sem_id, 0, GETVAL);這行代碼就表示得到標(biāo)識(shí)符為sem_id的信號(hào)量集合中的編號(hào)為0的信號(hào)量的值,并且把該值保存在int類型的變量semValue1中。

        3 Linux多值信號(hào)量的操作

        如果信號(hào)量集合中有多個(gè)信號(hào)量,則需要分別調(diào)用代碼int semValue1=semctl(sem_id, 0,GETVAL)多次。由此可見(jiàn)這種方式代碼重復(fù)性較高,也比較麻煩。能否找到一種簡(jiǎn)單的方法直接得到該信號(hào)量集合中的所有信號(hào)量的值?答案是肯定的。這個(gè)時(shí)候需要用到semctl函數(shù)中的第四個(gè)參數(shù),即union semun{int val;struct semid_ds *buf;ushort *array;struct seminfo *__buf; };需要先在代碼中聲明一下這個(gè)類型,然后定義此類型的變量,例如union semun semarg;再定義一個(gè)unsigned short 類型的數(shù)組,代碼為unsigned shortreturnvalue[2]={0,0};該數(shù)組用來(lái)存放取出的信號(hào)量的值;第三步必須要給聯(lián)合類型的變量semarg中的array屬性賦值為第二步中定義的數(shù)組變量returnvalue,對(duì)應(yīng)代碼semarg.array=returnvalue;如果沒(méi)有該步操作,相當(dāng)于沒(méi)有給semarg.array指針賦值,則程序運(yùn)行結(jié)束后會(huì)收到SIGSEGV信號(hào),從而出現(xiàn)段錯(cuò)誤。之后可以調(diào)用semctl函數(shù)完成取值操作,此時(shí),semctl函數(shù)中的第三個(gè)參數(shù)需要設(shè)置為GETALL,代碼為semctl(sem_id,0,GETALL,semarg);便可以把標(biāo)識(shí)符為sem_id的信號(hào)量集合中的所有信號(hào)量的值取出來(lái),放入semarg變量中。

        參考文獻(xiàn)

        [1]W.Richard Stevens,Stephen A. Rago 著 尤晉元等譯.UNIX環(huán)境高級(jí)編程[M].北京:人民郵電出版社,2006,422-426.

        [2]楊宗德.Linux高級(jí)程序設(shè)計(jì)[M].北京:人民郵電出版社,2012,273-285.

        [3]楊水清.精通ARM嵌入式Linux系統(tǒng)開(kāi)發(fā)[M].北京:電子工業(yè)出版社,2012,417-420.

        收稿日期:2016-08-18

        作者簡(jiǎn)介:許豪(1982—),男,河南南陽(yáng)人,碩士,講師,主要研究方向:嵌入式Linux開(kāi)發(fā),云計(jì)算相關(guān)。

        猜你喜歡
        信號(hào)量操作
        基于STM32的mbedOS信號(hào)量調(diào)度機(jī)制剖析
        互斥信號(hào)量初值不同情況分析
        Nucleus PLUS操作系統(tǒng)信號(hào)量機(jī)制的研究與測(cè)試
        關(guān)于數(shù)控機(jī)床操作中防碰撞措施的探討及分析
        兒童數(shù)學(xué)學(xué)業(yè)求助的有效方式
        泌尿外科手術(shù)及操作致輸尿管損傷臨床分析
        變電運(yùn)行中容易出現(xiàn)的問(wèn)題及解決措施
        淺談低年級(jí)數(shù)學(xué)教學(xué)中的操作能力
        東方教育(2016年17期)2016-11-23 10:27:25
        包埋在病理制片中的應(yīng)用分析
        今日健康(2016年12期)2016-11-17 12:54:26
        硬件信號(hào)量在多核處理器核間通信中的應(yīng)用
        五月婷婷激情六月开心| 日本不卡一区二区三区在线| 亚洲 欧美 激情 小说 另类| 亚洲国产精品久久久性色av| 人妻av中文字幕精品久久| 无遮挡很爽很污很黄的女同| 中文字幕人妻无码一夲道| 在线一区不卡网址观看| 国产亚洲午夜高清国产拍精品不卡| 久久精品国产亚洲av成人文字| 国产午夜成人av在线播放| 亚洲av无码成人精品区天堂| 亚洲一区二区免费日韩| 国内自拍视频一区二区三区| 在线看片免费人成视频电影 | 国产无遮挡裸体免费视频| 国产乱人伦真实精品视频| 免费蜜桃视频在线观看| 久久婷婷色香五月综合缴缴情 | 免费人成视频欧美| 国产精品久久婷婷六月丁香| 乱中年女人伦| 免费无码av片在线观看网址| 国产熟女av一区二区三区四季| 美艳善良的丝袜高跟美腿| 亚洲一区二区三区无码久久| 国产美女免费国产| 一个人看的在线播放视频| 亚洲av成人精品一区二区三区 | 午夜少妇高潮免费视频| 精品人妻少妇av中文字幕| 熟女人妇交换俱乐部| 99久久国产综合精品女乱人伦| 亚洲午夜精品第一区二区| 国产福利永久在线视频无毒不卡| 中文字幕亚洲欧美日韩在线不卡| 日韩精品有码在线视频| 国产一区国产二区亚洲精品| 久久精品娱乐亚洲领先| 久久精品中文字幕久久| 久久亚洲春色中文字幕久久|