freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

linux環(huán)境進(jìn)程間通信(三):消息隊(duì)列-wenkub

2023-01-23 07:54:39 本頁(yè)面
 

【正文】 時(shí),雖然消息隊(duì)列中的消息數(shù)目很多,但基本上都只有一個(gè)字節(jié)。 msgrcv()解除阻塞的條件有三個(gè): 1. 消息隊(duì)列中有了滿足條件的消息; 2. msqid代表的消息隊(duì)列被刪 除; 3. 調(diào)用 msgrcv()的進(jìn)程被信號(hào)中斷; 調(diào)用返回: 成功返回讀出消息的實(shí)際字節(jié)數(shù),否則返回 1。 msqid為消息隊(duì)列描述字;消息返回后存儲(chǔ)在 msgp指向的地址, msgsz指定 msgbuf 的 mtext成員的長(zhǎng)度(即消息內(nèi)容的長(zhǎng)度), msgtyp為請(qǐng)求讀取的 消息類型 ;讀消息標(biāo)志 msgflg可以為以下幾個(gè)常值的或: ? IPC_NOWAIT 如果沒有滿足條件的消息,調(diào)用 立即返回 ,此時(shí), errno=ENOMSG ? IPC_EXCEPT 與 msgtyp0配合使用,返回隊(duì)列中第一個(gè)類型不為 msgtyp 的消息 ? IPC_NOERROR 如果隊(duì)列中滿足條件的消息內(nèi)容大于所請(qǐng)求的 msgsz字節(jié),則把該消息 截?cái)?,截?cái)嗖糠謱G失。 調(diào)用返回: 成功返回消息隊(duì)列描述字,否則返回 1。 ? 正如 ipc手冊(cè)所說(shuō)的: ipc()是 linux所特有的,編寫程序時(shí)應(yīng)注意程序的移植性問(wèn)題; ? 該系統(tǒng)調(diào)用的實(shí)現(xiàn)不過(guò)是把系統(tǒng) V IPC函數(shù)進(jìn)行了封裝,沒有任何效率上的優(yōu)勢(shì); ? 系統(tǒng) V在 IPC 方面的 API數(shù)量不多,形式也較簡(jiǎn)潔。 與該操作對(duì)應(yīng)的系統(tǒng) V調(diào)用為: int msgsnd( first, (struct msgbuf*)ptr, second, third)。 ? int ipc(MSGGET, int first, int second, int third, void *ptr, long fifth)。)。 消息隊(duì)列 API 文件名到鍵值 include sys/ include sys/ key_t ftok (char*pathname, char proj); 它返回與路徑 pathname相對(duì)應(yīng)的一個(gè)鍵值。 }。 unsigned long seq。 gid_t gid。 3. 下圖說(shuō)明了內(nèi)核與消息隊(duì)列是怎樣建立起聯(lián)系的: 其中: struct ipc_ids msg_ids是內(nèi)核中記錄消息隊(duì)列的全局?jǐn)?shù)據(jù)結(jié)構(gòu); struct msg_queue是每個(gè)消息隊(duì)列的隊(duì)列頭。 2. 消息隊(duì)列就是一個(gè)消息的鏈表。 因此,本 文將主要介紹系統(tǒng) V消息隊(duì)列及其相應(yīng) API。 目前主要有兩種類型的消息隊(duì)列: POSIX消息隊(duì)列以及系統(tǒng) V消息隊(duì)列,系統(tǒng) V消息隊(duì)列目前被大量使用。 消息隊(duì)列就是一個(gè)消息的鏈表。本系列文章中的前兩部分,我們探討 管道 及 信號(hào) 兩種通信機(jī)制,本文將深入第三部分,介紹系統(tǒng) V 消息隊(duì)列及其相應(yīng) API。可以把消息看作一個(gè)記錄,具有特定的格式以及特定的優(yōu)先級(jí)??紤]到程序的可移植性,新開發(fā)的應(yīng)用程序應(yīng)盡量使用 POSIX 消息隊(duì)列。 在沒有聲明的情況下,以下討論中指的都是系統(tǒng) V消息隊(duì)列。每個(gè)消息隊(duì)列都有一個(gè)隊(duì)列頭,用結(jié)構(gòu) struct msg_queue來(lái)描述(參見 附錄 2)。 從上圖可以看出,全局?jǐn)?shù)據(jù)結(jié)構(gòu) struct ipc_ids msg_ids 可以訪問(wèn)到每個(gè)消息隊(duì)列頭的第一個(gè)成員: struct kern_ipc_perm;而每個(gè) struct kern_ipc_perm能夠與具體的消息隊(duì)列對(duì)應(yīng)起來(lái)是因?yàn)樵谠摻Y(jié)構(gòu)中,有一個(gè) key_t類型成員 key,而 key則唯一確定一個(gè)消息隊(duì)列。 uid_t cuid。 } 二、操作消息隊(duì)列 對(duì)消息隊(duì)列的操作無(wú)非有下面三種類型: 打開或創(chuàng)建消息隊(duì)列 消息隊(duì)列的內(nèi)核持續(xù)性要求每個(gè)消息隊(duì)列都在系統(tǒng)范圍內(nèi)對(duì)應(yīng)唯一的鍵值,所以,要獲得一個(gè) 消息隊(duì)列的描述字,只需提供該消息隊(duì)列的鍵值即可; 注:消息隊(duì)列描述字是由在系統(tǒng)范圍內(nèi)唯一的鍵值生成的,而鍵值可以看作對(duì)應(yīng)系統(tǒng)內(nèi)的一條路經(jīng)。 mtype成員代表消息類型,從消息隊(duì)列中讀取消息的一個(gè)重要依據(jù)就是消息的類型; mtext是消息內(nèi)容,當(dāng)然長(zhǎng)度不一定為 1。該函數(shù)不直接對(duì)消息隊(duì)列操作,但在調(diào)用 ipc(MSGGET,…) 或 msgget()來(lái)獲得消息隊(duì)列描述字前,往往要調(diào)用該函數(shù)。 ipc_id=ipc(MSGGET, (int)key, flags,0,NULL,0)。 與該操作對(duì)應(yīng)的系統(tǒng) V調(diào)用為: int msgget( (key_t)first, second)。 ? int ipc(MSGRCV, int first, int second, int third, void *ptr, long fifth)。 V消息隊(duì)列 API 系統(tǒng) V消息隊(duì)列 API共有四個(gè),使用時(shí)需要包括幾個(gè)頭文件: include sys/ include sys/ include sys/ 1) int msgget(key_t key, int msgflg) 參數(shù) key是一個(gè)鍵值,由 ftok獲得; msgflg參數(shù)是一些標(biāo)志位。 注:參數(shù) key設(shè)置成常數(shù) IPC_PRIVATE并不意味著其他進(jìn)程不能訪問(wèn)該消息隊(duì)列,只意味 著即將創(chuàng)建新的消息隊(duì)列。 msgrcv手冊(cè)中詳細(xì)給出了消息類型取不同值時(shí) (0。 3) int msgsnd(int msqid, struct msgbuf *msgp, int msgsz, int msgflg)。 msgsnd()解除阻塞的條件有三個(gè): 1. 不滿足上述兩個(gè)條件,即消息隊(duì)列中有容納該消息的空間; 2. msqid代表的消息隊(duì)列被刪除; 3. 調(diào)用 msgsnd()的進(jìn)程被信號(hào)中斷; 調(diào)用返回: 成功返回 0,否則返回 1。 3. IPC_RMID: 刪除 msqid標(biāo)識(shí)的消息隊(duì)列; 調(diào)用返回: 成功返回 0,否則返回 1。 注:上述兩個(gè)限制是針對(duì)每個(gè)消息隊(duì)列而言的,系統(tǒng)對(duì)消息隊(duì)列的限制還有系統(tǒng)范圍內(nèi)的最大消息 隊(duì)列個(gè)數(shù),以及整個(gè)系統(tǒng)范圍內(nèi)的最大消息數(shù)。 main() { int gflags,sflags,rflags。 struct msgsbuf{ int mtype。 char mtext[10]。 key=ftok(msgpath,39。 msgid=msgget(key,gflags|00666)。 sflags=IPC_NOWAIT。 reval=msgsnd(msgid,amp。 rflags=IPC_NOWAIT|MSG_NOERROR。 else printf(read from msg queue %d bytes\n,reval)。// =16388。 return。 return。msg_info)。 printf(current number of bytes on queue is %d\n,)。在創(chuàng)建新的消息隊(duì)列時(shí), //msg_qbytes的缺省值就是 MSGMNB printf(pid of last msgsnd is %d\n,)。 printf(last msgrcv time is %s, ctime(amp。 printf(msg uid is %d\n,)。這兩點(diǎn)是管道以及有名管道所不能比的。如消息隊(duì)列、信號(hào)燈以及共享內(nèi)存等; 3. 隨文件系統(tǒng)持續(xù): IPC一直持續(xù)到顯示刪除該對(duì)象為止。 /* last msgrcv time */ time_t q_ctime。 /* max number of bytes on queue */ pid_t q_lspid。 struct list_head q_senders。 /* first message on queue,unused */ struct msg *msg_last。 /* last change time */ unsigned long msg_lcbytes。 /* number of messages in queue */ unsigned short msg_qbytes。 //可以看出上述兩個(gè)結(jié)構(gòu)很相似。 ? linux下對(duì)文件的操作,詳細(xì)介紹了對(duì)文件的存取權(quán)限位,對(duì) IPC 對(duì)象的存取權(quán)限同樣具有很好的借鑒意義。t charge you more than 35% of your pensation if you win the case. If you are thinking about signing up for a damagesbased agreement, you should make sure you39。s Premier League match at Chelsea on Sunday. I am going to be at the match tomorrow and I have asked to meet Yaya Toure, he told BBC Sport. For m
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1