物聯(lián)網(wǎng)倉(cāng)儲(chǔ)系統(tǒng)_第1頁(yè)
物聯(lián)網(wǎng)倉(cāng)儲(chǔ)系統(tǒng)_第2頁(yè)
物聯(lián)網(wǎng)倉(cāng)儲(chǔ)系統(tǒng)_第3頁(yè)
物聯(lián)網(wǎng)倉(cāng)儲(chǔ)系統(tǒng)_第4頁(yè)
物聯(lián)網(wǎng)倉(cāng)儲(chǔ)系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩35頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、項(xiàng)目組員:項(xiàng)目組員: 董亞軍董亞軍 郝賢森郝賢森 趙星達(dá)趙星達(dá) 姜兆勇姜兆勇 張超張超 劉繼琛劉繼琛 張立東張立東匯報(bào)人:匯報(bào)人:董亞軍董亞軍項(xiàng)目分工:項(xiàng)目分工:n主線程:董亞軍郝賢森n系統(tǒng)移植:趙星達(dá)nM0:張立東 姜兆勇nWeb、CGI:劉繼琛 張超物聯(lián)網(wǎng)介紹物聯(lián)網(wǎng)介紹n物聯(lián)網(wǎng)是新一代信息技術(shù)的重要組成部分。其英文名稱(chēng)是“The Internet of things”。由此,顧名思義,“物聯(lián)網(wǎng)就是物物相連的互聯(lián)網(wǎng)”。這有兩層意思:第一,物聯(lián)網(wǎng)的核心和基礎(chǔ)仍然是互聯(lián)網(wǎng),是在互聯(lián)網(wǎng)基礎(chǔ)上的延伸和擴(kuò)展的網(wǎng)絡(luò);第二,其用戶端延伸和擴(kuò)展到了任何物品與物品之間,進(jìn)行信息交換和通信。物聯(lián)網(wǎng)就是“物物相連

2、的互聯(lián)網(wǎng)”。物聯(lián)網(wǎng)通過(guò)智能感知、識(shí)別技術(shù)與普適計(jì)算、泛在網(wǎng)絡(luò)的融合應(yīng)用,被稱(chēng)為繼計(jì)算機(jī)、互聯(lián)網(wǎng)之后世界信息產(chǎn)業(yè)發(fā)展的第三次浪潮。物聯(lián)網(wǎng)是互聯(lián)網(wǎng)的應(yīng)用拓展,與其說(shuō)物聯(lián)網(wǎng)是網(wǎng)絡(luò),不如說(shuō)物聯(lián)網(wǎng)是業(yè)務(wù)和應(yīng)用。因此,應(yīng)用創(chuàng)新是物聯(lián)網(wǎng)發(fā)展的核心,以用戶體驗(yàn)為核心的創(chuàng)新2.0是物聯(lián)網(wǎng)發(fā)展的靈魂。物聯(lián)網(wǎng)定義物聯(lián)網(wǎng)定義n最初在1999年提出:即通過(guò)射頻識(shí)別(RFID)、紅外感應(yīng)器、全球定位系統(tǒng)、激光掃描器、氣體感應(yīng)器等信息傳感設(shè)備,按約定的協(xié)議,把任何物品與互聯(lián)網(wǎng)連接起來(lái),進(jìn)行信息交換和通訊,以實(shí)現(xiàn)智能化識(shí)別、定位、跟蹤、監(jiān)控和管理的一種網(wǎng)絡(luò)。簡(jiǎn)而言之,物聯(lián)網(wǎng)就是“物物相連的互聯(lián)網(wǎng)”。物聯(lián)網(wǎng)定義物聯(lián)網(wǎng)定義n 中

3、國(guó)物聯(lián)網(wǎng)校企聯(lián)盟將物聯(lián)網(wǎng)的定義為當(dāng)下幾乎所有技術(shù)與計(jì)算機(jī)、互聯(lián)網(wǎng)技術(shù)的結(jié)合,實(shí)現(xiàn)物體與物體之間:環(huán)境以及狀態(tài)信息實(shí)時(shí)的實(shí)時(shí)共享以及智能化的收集、傳遞、處理、執(zhí)行。廣義上說(shuō),當(dāng)下涉及到信息技術(shù)的應(yīng)用,都可以納入物聯(lián)網(wǎng)的范疇。項(xiàng)目總流程項(xiàng)目總流程項(xiàng)目簡(jiǎn)介項(xiàng)目簡(jiǎn)介n 通過(guò)web端遠(yuǎn)程訪問(wèn)服務(wù)器,達(dá)到對(duì)數(shù)據(jù)的采集,查看實(shí)時(shí)的倉(cāng)庫(kù)信息。發(fā)生異常時(shí)進(jìn)行報(bào)警、做出相應(yīng)的處理。n 通過(guò)web端遠(yuǎn)程控制,當(dāng)貨物的進(jìn)出倉(cāng)庫(kù)時(shí)進(jìn)行記錄。n n 這個(gè)方案主要用到了下面的技術(shù):物聯(lián)網(wǎng)倉(cāng)儲(chǔ)系統(tǒng)設(shè)計(jì)的技術(shù)物聯(lián)網(wǎng)倉(cāng)儲(chǔ)系統(tǒng)設(shè)計(jì)的技術(shù) Linux設(shè)備驅(qū)動(dòng) Zigbee無(wú)線技術(shù)與RFID技術(shù) 傳感器技術(shù)(溫度、光線、濕度、重力感應(yīng)

4、等) Cortex-M0 ARM 微控制器技術(shù) I2C、SPI、中斷、單總線、A/D、PWM、UART等多種接口技術(shù) 監(jiān)控及視頻流處理技術(shù) GPRS遠(yuǎn)程報(bào)警技術(shù)(未完成) 嵌入式Web服務(wù)器技術(shù) 處理客戶請(qǐng)求(CGI)技術(shù) 數(shù)據(jù)庫(kù)技術(shù)(sqlite3) wifi技術(shù)(sqlite3)(未完成) html頁(yè)面顯示技術(shù)全局結(jié)構(gòu)體定義全局結(jié)構(gòu)體定義n/倉(cāng)庫(kù)貨物信息nstruct storage_goods_infonnunsigned char goods_type;/貨物類(lèi)型,用數(shù)字表示nunsigned int goods_count;/貨物數(shù)量n;全局結(jié)構(gòu)體定義全局結(jié)構(gòu)體定義n/某個(gè)倉(cāng)庫(kù)的全部

5、信息nstruct storage_infonnunsigned char storage_status; nunsigned char led_status;nunsigned char buzzer_status;nunsigned char fan_status;nunsigned char seg_status;nsigned char x;nsigned char y;nsigned char z;nfloat temperature;nfloat temperatureMIN;全局結(jié)構(gòu)體定義全局結(jié)構(gòu)體定義nfloat temperatureMAX;nfloat humidity;n

6、float humidityMIN;nfloat humidityMAX;nfloat illumination;nfloat illuminationMIN;nfloat illuminationMAX;nfloat battery;nfloat adc;nstruct storage_goods_info goods_infoGOODS_NUM;n;全局結(jié)構(gòu)體定義全局結(jié)構(gòu)體定義n/所有倉(cāng)庫(kù)的信息結(jié)構(gòu)體nstruct env_info_clien_addrnnstruct storage_info storage_noSTORAGE_NUM;n;n/消息隊(duì)列結(jié)構(gòu)體nstruct msgnnl

7、ong type;/從消息隊(duì)列接收消息時(shí)用于判斷的消息類(lèi)型nlong msgtype;/具體的消息類(lèi)型nunsigned char textQUEUE_MSG_LEN;/消息正文n;用到的線程用到的線程n其中用到的線程如下:npthread_client_request():處理消息隊(duì)列里請(qǐng)求的線程.npthread_refresh():更新共享內(nèi)存里的實(shí)時(shí)數(shù)據(jù).npthread_sqlite():數(shù)據(jù)庫(kù)線程.npthread_transfer():接收M0數(shù)據(jù)線程.npthread_analysis():M0數(shù)據(jù)分析線程.npthread_sms():短信模塊控制線程.(未使用)npthre

8、ad_buzzer():A9蜂鳴器控制線程.npthread_led():A9LED模塊線程.npthread_camera():攝像頭模塊控制線程.線程和進(jìn)程的區(qū)別:線程和進(jìn)程的區(qū)別:n線程:是一種輕量級(jí)進(jìn)程,線程存在于進(jìn)程中。n 線程和進(jìn)程一樣都會(huì)被操作系統(tǒng)調(diào)度(時(shí)間片)n 通常線程指的是共享相同地址空間的多個(gè)任務(wù)。n線程優(yōu)勢(shì):線程運(yùn)行時(shí),相互切換效率高;線程之間共享數(shù)據(jù)很方便。n進(jìn)程擁有獨(dú)立的運(yùn)行空間,一個(gè)進(jìn)程崩潰后,在保護(hù)模式下并不會(huì)影響其他的進(jìn)程。一個(gè)進(jìn)程中可以包含有多個(gè)線程,而一個(gè)線程只能包含在進(jìn)程中。一個(gè)線程擁有自己獨(dú)有的局部變量棧,但是沒(méi)有獨(dú)立的空間,一個(gè)進(jìn)程中多個(gè)線程共同共享

9、一塊資源,因此當(dāng)一個(gè)線程崩潰后此進(jìn)程也會(huì)崩潰。因此多進(jìn)程要比多線程健壯性要好,但是,多進(jìn)程效率比較低。當(dāng)需要并行操作和共享某些變量最好使用多線程的模式。線程線程n創(chuàng)建:創(chuàng)建一個(gè)線程nint pthread_create(pthread_t *thread, const pthread_attr_t n *attr, void * (* routine)(void *), void *arg)n參數(shù):thread, 線程的標(biāo)識(shí)符(類(lèi)似于進(jìn)程的pid號(hào))n attr, 用于指定創(chuàng)建的線程的屬性, 通常為NULL(不需要設(shè)置)n routine, 函數(shù)指針,該函數(shù)就是線程主體n arg, 就是傳遞給

10、函數(shù)的參數(shù)。n返回值:成功返回0, 失敗返回非負(fù)的錯(cuò)誤號(hào)線程線程n int pthread_exit(void *value_ptr) n 功能:只會(huì)導(dǎo)致當(dāng)前線程的退出函數(shù)n 參數(shù):就是傳遞的退出狀態(tài)(指針)n 通常使用: pthread_exit(0); n返回值:成功返回0, 失敗返回非負(fù)的錯(cuò)誤號(hào)n進(jìn)程對(duì)已經(jīng)退出的線程必須要做回收線程資源的操作(否則會(huì)產(chǎn)生僵尸線程)nint pthread_join(pthread_t thread, void *value_ptr) n功能:阻塞等待回收退出的線程的資源n參數(shù): thread, 就是指定要回收的線程資源n value_ptr, 就是接收到

11、線程的退出狀態(tài)。n返回值:成功返回0, 失敗返回非負(fù)的錯(cuò)誤號(hào) 線程的控制線程的控制n控制線程: n互斥鎖 :主要用來(lái)保護(hù)臨界資源(可是變量,后者是代碼段)n 任何時(shí)刻最多只能有一個(gè)線程能訪問(wèn)該資源n相關(guān)函數(shù)接口:nint pthread_mutex_init(pthread_mutex_t *mutex, pthread_mutexattr_t *attr)n功能:鎖的初始化函數(shù),即生成一把鎖n參數(shù): mutex, 是鎖的標(biāo)識(shí)符n attr, 設(shè)置鎖的屬性, 通常為NULL。n返回值: 返回值:成功返回0, 失敗返回非負(fù)的錯(cuò)誤號(hào) 線程控制線程控制nint pthread_mutex_lock(

12、pthread_mutex_t *mutex)p功能:阻塞等待直到這把鎖申請(qǐng)成功為止,對(duì)臨界資源進(jìn)行上鎖操作p參數(shù): mutex, 就是指定的一把鎖 p返回值:成功返回0, 失敗返回非負(fù)的錯(cuò)誤號(hào)nint pthread_mutex_unlock(pthread_mutex_t *mutex) p功能:對(duì)臨界資源進(jìn)行解鎖操作p參數(shù): mutex, 就是指定要解開(kāi)的鎖 p返回值:成功返回0, 失敗返回非負(fù)的錯(cuò)誤號(hào) nint pthread_mutex_destroy(pthread_mutex_t *mutex);p功能:銷(xiāo)毀一把指定的鎖p參數(shù): mutex, 就是指定要銷(xiāo)毀的鎖 p返回值:成功返

13、回0, 失敗返回非負(fù)的錯(cuò)誤號(hào)注意: 為了避免死鎖:在申請(qǐng)多把鎖時(shí),所有的線程都按照同樣的順序去申請(qǐng)。線程之間的通信線程之間的通信-條件變量條件變量 int pthread_cond_init(pthread_cond_t *restrict cond,const pthread_condattr_t *restrict attr);n 功能:初始化一個(gè)條件變量n 參數(shù):cond, 就是條件變量的標(biāo)識(shí)符n attr, 通常為NULL即可n 返回值:成功返回0, 失敗返回非負(fù)的錯(cuò)誤號(hào) nint pthread_cond_wait(pthread_cond_t *restrict cond, pth

14、read_mutex_t *restrict mutex);n功能:條件睡眠,直到被指定的條件喚醒為止n參數(shù): cond, 就是指定睡眠 條件,將來(lái)被喚醒時(shí)也必須滿足該條件n mutex, 該函數(shù)睡眠時(shí)必須提前加上一把鎖n 注意:該睡眠函數(shù)調(diào)用之前必須先加上一把鎖,然后進(jìn)入睡眠,然后該函數(shù)內(nèi)部n 將鎖解開(kāi);當(dāng)該函數(shù)被喚醒時(shí),需要重新加上這把鎖,如果發(fā)現(xiàn)這把鎖被其他線程n 占用,那么該函數(shù)的喚醒操作就失敗了,繼續(xù)睡眠。 n返回值:成功返回0, 失敗返回非負(fù)的錯(cuò)誤號(hào) 線程之間的通信線程之間的通信-條件變量條件變量nint pthread_cond_signal(pthread_cond_t *co

15、nd);n功能:就是喚醒睡眠在cond條件上的線程,但是只能喚醒一個(gè)線程n參數(shù): cond, 就是指定要喚醒的條件n返回值:成功返回0, 失敗返回非負(fù)的錯(cuò)誤號(hào) nint pthread_cond_broadcast(pthread_cond_t *cond);n功能:?jiǎn)拘阉兴哌@個(gè)條件上的線程nint pthread_cond_destroy(pthread_cond_t *cond);n功能:就是銷(xiāo)毀條件變量 處理消息隊(duì)列請(qǐng)求線程處理消息隊(duì)列請(qǐng)求線程消息對(duì)列消息對(duì)列n創(chuàng)建/打開(kāi)消息隊(duì)列對(duì)象nint msgget(key_t key, int flag);n參數(shù):key, ftok()函數(shù)的

16、返回值,用于確保多個(gè)進(jìn)程操作同一個(gè)消息隊(duì)列n flag, IPC_CREAT IPC_EXCL 和共享內(nèi)存一樣n返回值:成功返回消息隊(duì)列的標(biāo)識(shí)符, 失敗-1n比如:msgget(key, IPC_CREAT|IPC_EXCL|0666);消息對(duì)列消息對(duì)列nint msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);n參數(shù):msgid, msgget的返回值n msgp, 要發(fā)送的數(shù)據(jù)的指針,有指定的數(shù)據(jù)格式。n struct msgbuf n long mtype; /* message type, must be 0 *

17、/n 數(shù)據(jù)類(lèi)型,可以自定義; /* message data */n int a; char b; float f;n ;n msgsz, 發(fā)送的消息的正文的長(zhǎng)度 = sizeof(struct msgbuf) - sizeof(long)n msgflg,IPC_NOWAIT 以非阻塞方式發(fā)送消息,如果發(fā)送不成功,那么不會(huì)阻塞,立刻返回。n 0(常用), 以阻塞方式發(fā)送消息,如果發(fā)送不成功,那么阻塞等待,直到發(fā)送成功為止。n返回值:成功0, 失敗-1消息隊(duì)列消息隊(duì)列nssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp

18、, int msgflg);n參數(shù):msqid, msgget的返回值n msgp, 用于接收讀取到的消息,固定格式,必須和發(fā)送的類(lèi)型保持一致。n msgsz, 仍然要接收的消息的正文長(zhǎng)度n msgtyp, n 0, 表示讀取第一條消息n 0, 表示讀取指定類(lèi)型消息(最常用)n 0, 接收消息隊(duì)列中類(lèi)型值不小于msgtyp的絕對(duì)值且類(lèi)型值又最小的消息n msgflg,n IPC_NOWAIT 以非阻塞方式接收消息,如果接收不成功,那么不會(huì)阻塞,立刻返回。n 0(常用), 以阻塞方式接收消息,如果接收不成功,那么阻塞等待,直到接收成功為止。n返回值:實(shí)際接收到的消息的正文的字節(jié)個(gè)數(shù) , 失敗-1

19、. 消息對(duì)列消息對(duì)列n消息隊(duì)列的控制函數(shù)nint msgctl ( int msgqid, int cmd, struct msqid_ds *buf );n參數(shù):n msgqid, 就是控制的消息隊(duì)列n cmd : n IPC_STAT (獲取對(duì)象屬性), 屬性保存在第三個(gè)參數(shù)上n IPC_SET (設(shè)置對(duì)象屬性),第三個(gè)參數(shù)保存的是要修改的屬性n IPC_RMID (刪除對(duì)象), 此時(shí)第三個(gè)參數(shù)為NULL即可n返回值:返回值和cmd有關(guān)系, 失敗-1.共享內(nèi)存共享內(nèi)存共享內(nèi)存共享內(nèi)存n共享內(nèi)存:是一種最為高效的進(jìn)程間通信方式,進(jìn)程可以直接讀寫(xiě)內(nèi)存,而不需要任何數(shù)據(jù)的拷貝n注意:由于多個(gè)進(jìn)程

20、共享一段內(nèi)存,因此也需要依靠某種同步機(jī)制來(lái)控制對(duì)它的寫(xiě)操作,如互斥鎖和信號(hào)量等 n#include nkey_t ftok(const char *pathname, int proj_id);n功能:就是生成key值。n參數(shù):pathname, 任意一個(gè)存在的路徑都可以n proj_id, 只要低8位(二進(jìn)制)不全為0的數(shù)都可以n返回值:成功key值, 失敗-1. n比如:key = ftok(., a);共享內(nèi)存共享內(nèi)存n創(chuàng)建/打開(kāi)共享內(nèi)存:創(chuàng)建于當(dāng)前系統(tǒng)上,保存到系統(tǒng)關(guān)閉為止。nint shmget(key_t key, int size, int shmflg);n參數(shù):key, 用于

21、唯一的標(biāo)識(shí)一塊共享內(nèi)存,將來(lái)其他進(jìn)程需要使用一樣的key值。n IPC_PRIVATE,表示該物理空間只能自己用,無(wú)法和其他進(jìn)程共享。n ftok()函數(shù)的返回值n size, 要申請(qǐng)的共享內(nèi)存物理空間, /usr/inclue/linux/shm.h中包含限制n shmflg, IPC_CREAT IPC_EXCLnIPC_CREAT 如果共享內(nèi)存不存在,則創(chuàng)建一個(gè)共享內(nèi)存,否則打開(kāi)操作。n IPC_EXCL 只有在共享內(nèi)存不存在的時(shí)候,新的共享內(nèi)存才建立,否則就產(chǎn)生錯(cuò)誤。n返回值:就是共享內(nèi)存的標(biāo)識(shí)符(大于0),失敗-1. n比如:key = ftok(., a);nint shmid;n

22、shmid = shmget(key, 512, IPC_CREAT|IPC_EXCL|0666);共享內(nèi)存共享內(nèi)存n映射共享內(nèi)存,即把指定的共享內(nèi)存映射到進(jìn)程的地址空間用于訪問(wèn)nvoid *shmat(int shmid, const void *shmaddr, int shmflg);n參數(shù):shmid, 就是shmget的返回值n shmaddr, 用于指定共享內(nèi)存映射到當(dāng)前進(jìn)程的那個(gè)起始地址上n 如果為NULL, 那么系統(tǒng)幫助進(jìn)程分配(最常用)n 如果非NULL, 那么就是自己指定(必須保證這塊空間沒(méi)有被使用)n shmflg, 指定進(jìn)程對(duì)該內(nèi)存區(qū)域的讀寫(xiě)權(quán)限n 如果為SHM_RDO

23、NLY ,那么當(dāng)前進(jìn)程只讀n 如果為0, 那么當(dāng)前進(jìn)程可讀可寫(xiě)(最常用)n返回值:返回當(dāng)前進(jìn)程和共享內(nèi)存映射后的起始地址n 失敗返回的為(void*)(-1)共享內(nèi)存共享內(nèi)存n撤銷(xiāo)共享內(nèi)存映射nint shmdt(const void *shmaddr);p參數(shù):shmaddr, 就是shmat的返回值p返回值:成功0, 失敗-1p操作共享內(nèi)存對(duì)象nint shmctl(int shmid, int cmd, struct shmid_ds *buf); / 獲取共享內(nèi)存的狀態(tài),并把相關(guān)的屬性賦值給bufp功能:控制共享內(nèi)存對(duì)象p參數(shù): shmid, shmget的返回值n cmd : IPC

24、_STAT (獲取對(duì)象屬性), 屬性保存在第三個(gè)參數(shù)上n IPC_SET (設(shè)置對(duì)象屬性),第三個(gè)參數(shù)保存的是要修改的屬性n IPC_RMID (刪除對(duì)象), 此時(shí)第三個(gè)參數(shù)為NULL即可p返回值:返回值和cmd有關(guān)系, 失敗-1.n比如:shmctl(shmid, IPC_RMID, NULL); 訪問(wèn)共享內(nèi)存訪問(wèn)共享內(nèi)存n創(chuàng)建/打開(kāi)信號(hào)量集合nint semget(key_t key, int nsems, int semflg);n參數(shù):n key, ftok()返回值n nsems, 指定的信號(hào)量集合中的信號(hào)量個(gè)數(shù)n semflg, n IPC_CREATn IPC_EXCLnIPC_

25、CREAT 如果共享內(nèi)存不存在,則創(chuàng)建一個(gè)共享內(nèi)存,否則打開(kāi)操作。n IPC_EXCL 只有在共享內(nèi)存不存在的時(shí)候,新的共享內(nèi)存才建立,否則就產(chǎn)生錯(cuò)誤。n返回值:返回該集合的標(biāo)識(shí)符,失敗-1. nint semctl(int semid, int semnum, int cmd, .);p功能:信號(hào)量集合的控制p參數(shù):semid, 指定要操作的集合n semnum, 要操作的信號(hào)量的編號(hào),編號(hào)從0開(kāi)始n cmd,GETVAL:獲取信號(hào)燈的值, 返回值是獲得值。n 比如:value = semctl(semid, 0, GETVAL);n SETVAL:設(shè)置信號(hào)燈的值,需要用到第四個(gè)參數(shù)。因此在

26、設(shè)置信號(hào)燈的值時(shí)應(yīng)該及時(shí)的設(shè)置共用體semun的值n 第四個(gè)參數(shù)類(lèi)型如下: n union semun n int val; /* Value for SETVAL */n struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */n unsigned short *array; /* Array for GETALL, SETALL */n struct seminfo *_buf; /* Buffer for IPC_INFOn (Linux-specific) */n ;nint semop ( int semid, struct s

27、embuf *opsptr, unsigned nops);n功能:就是對(duì)信號(hào)量集合中的信號(hào)量進(jìn)行PV操作n參數(shù): semid, 指定要操作的集合n opsptr,n struct sembufn unsigned short sem_num; /* semaphore number */n short sem_op; /* semaphore operation */n short sem_flg; /* operation flags */n ;n 成員分析:n sem_num 表示要操作的信號(hào)量的編號(hào)n sem_op, 表示進(jìn)行P或者V操作, 比如:sem_op = 10(+10)n s

28、em_op = -10(-10)n sem_op = 0, 那么semop函數(shù)會(huì)等到該信號(hào)量的值變?yōu)?為止。n sem_flg, 0(最常用的),表示semop函數(shù)的操作是阻塞的,直到成功為止。n IPC_NOWAIT,表示semop函數(shù)的操作是非阻塞的,如果操作沒(méi)有成功,立刻返回。n SEM_UNDO(不常用),設(shè)置只對(duì)當(dāng)前進(jìn)程有效,不會(huì)保存到系統(tǒng)的信號(hào)量集合中。n nops, 調(diào)用一次semop要操作的信號(hào)量的個(gè)數(shù)n返回值:成功0, 失敗-1 linux 管道、消息隊(duì)列、共享內(nèi)存的對(duì)比管道、消息隊(duì)列、共享內(nèi)存的對(duì)比 n管道的優(yōu)點(diǎn)是不需要加鎖,缺點(diǎn)是默認(rèn)緩沖區(qū)太小,只有4K,同時(shí)只適合父子進(jìn)

29、程間通信,而且一個(gè)管道只適合單向通信,如果要雙向通信需要建立兩個(gè)。而且不適合多個(gè)子進(jìn)程,因?yàn)橄?huì)亂,它的發(fā)送接收機(jī)制是用read/write這種適用流的,缺點(diǎn)是數(shù)據(jù)本身沒(méi)有邊界,需要應(yīng)用程序自己解釋?zhuān)话阆⒋蠖嗍且粋€(gè)固定長(zhǎng)的消息頭,和一個(gè)變長(zhǎng)的消息體,一個(gè)子進(jìn)程從管道read到消息頭后,消息體可能被別的子進(jìn)程接收到linux 管道、消息隊(duì)列、共享內(nèi)存的對(duì)比管道、消息隊(duì)列、共享內(nèi)存的對(duì)比 n消息隊(duì)列也不要加鎖,默認(rèn)緩沖區(qū)和單消息上限都要大一些,在我的suse10上是64K,它并不局限于父子進(jìn)程間通信,只要一個(gè)相同的key,就可以讓不同的進(jìn)程定位到同一個(gè)消息隊(duì)列上,它也可以用來(lái)給雙向通信,不過(guò)稍微加個(gè)標(biāo)識(shí),可以通過(guò)消息中的type進(jìn)行區(qū)分,比如一個(gè)任務(wù)分派進(jìn)程,創(chuàng)建了若干個(gè)執(zhí)行子進(jìn)程,不管是父進(jìn)程發(fā)送分派任務(wù)的消息,還是子進(jìn)程發(fā)送任務(wù)執(zhí)行的消息,都將type設(shè)置為目標(biāo)進(jìn)程的pid,因?yàn)閙sgrcv可以指定只接收消息類(lèi)型為type的消息,這樣就實(shí)現(xiàn)了子進(jìn)程只接收自己的任務(wù),父進(jìn)程只接收任務(wù)結(jié)果linux 管道、消息隊(duì)列、共享內(nèi)存的對(duì)比管道、消息隊(duì)列、共享內(nèi)存的對(duì)比 n

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論