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

正文內容

進程間通信ipc(interprocesscommunication)(編輯修改稿)

2025-08-28 14:15 本頁面
 

【文章內容簡介】 include sys/ include sys/ 創(chuàng)建隊列 int msgget(key_t key, int flag)。 刪除隊列 int msgctl(int msqid, IPC_RMID , NULL)。 發(fā)送消息 int msgsnd(int msqid, struct msgbuf *msgp, size_t msgsz, int msgflg)。 每個消息都由三部分組成,它們是:正長整型類型字段、非負長度( msgsz)以及實際數據字節(jié)(對應于長度)。消息總是放在隊列尾端。 msgp指向一個長整型數,它包含了正整型消息類型,在其后立即跟隨了消息數據。(若 msgsz是 0,則無消息數據。)若發(fā)送的最長消息是 512字節(jié),則可定義下列結構: struct mymesg { long mtype。 /* positive message type */ char mtext[512]。 /* message data, of length msgsz*/ }。 于是, msgp就是一個指向 mymesg結構的指針。接收者可以使用消息類型以非先進先出的次序取消息。 ? msgflg的值可以指定為 IPC_NOWAIT。這類似于文件 I/O的非阻塞 I/O標志。若消息隊列已滿(或者是隊列中的消息總數等于系統(tǒng)限制值,或隊列中的字節(jié)總數等于系統(tǒng)限制值),則指定IPC_NOWAIT使得 msgsnd立即出錯返回 EAGAIN。 ? 如果沒有指定 IPC_NOWAIT,則進程阻塞直到( a)有空間可以容納要發(fā)送的消息,或( b)從系統(tǒng)中刪除了此隊列,或( c)捕捉到一個信號,并從信號處理程序返回。在第二種情況下,返回EIDRM(“標志符被刪除”)。最后一種情況則返回 EINTR。 接收消息 ssize_t msgrcv(int msqid, struct msgbuf *msgp, size_t msgsz, long msgtyp, int msgflg)。 如同 msgsnd中一樣, msgp參數指向一個長整型數(返回的消息類型存放在其中),跟隨其后的是存放實際消息數據的緩存。 msgsz說明數據緩存的長度。若返回的消息大于 msgsz,而且在msgflg中設置了 MSG_NOERROR,則該消息被截短(在這種情況下,不通知我們消息截短了)。如果沒有設置這一標志,而消息又太長,則出錯返回 E2BIG(消息仍留在隊列中)。 參數 type使我們可以指定想要哪一種消息 : ? type == 0 返回隊列中的第一個消息。 ? type 0 返回隊列中消息類型為 type的第一個消息。 ? type 0 返回隊列中消息類型值小于或等于 type絕對值,而且在這種消息中,其類型值又最小的消息。 非 0type用于以非先進先出次序讀消息。例如,若應用程序對消息賦優(yōu)先權,那么 type就可以是優(yōu)先權值。如果一個消息隊列由多個客戶機和一個服務器使用,那么 type字段可以用來包含客戶機進程 ID。 ? 可以指定 msgflg值為 IPC_NOWAIT,使操作不阻塞。這使得如果沒有所指定類型的消息,則 msgrcv出錯返回 ENOMSG。如果沒有指定 IPC_NOWAIT,則進程阻塞直至( a)有了指定類型的消息,或( b)從系統(tǒng)中刪除了此隊列(出錯返回 EIDRM),或( c)捕捉到一個信號并從信號處理程序返回(出錯返回 EINTR)。 消息對列的系統(tǒng)限制 ? MSGMAX 可發(fā)送的最長消息的字節(jié)長度 8192 ? MSGMNB 一個隊列的最大字節(jié)長度 (亦即隊列中所有消息之和 ) 16384 ? MSGMNI 系統(tǒng)中最大消息隊列數 16 如果進程間要交換的數據量比較大,可以用文件或套接口機制。 信號量 ? 信號量實際上是同步原語而不是 IPC,常用于共享資源的同步存取,例如共享內存。 ? 為了獲得共享資源,進程需要執(zhí)行下列操作: 1)測試控制該資源的信號量。 2)若此信號量的值為正,則進程可以使用該資源。進程將信號量值減 1,表示它使用了一個資源單位。 3)若此信號量的值為 0,則進程進入睡眠狀態(tài),直至信號量值大于 0。若進程被喚醒后,它返回至第1步。 4)當進程不再使用由一個信息量控制的共享資源時,該信號量值增 1。如果有進程正在睡眠等待此信號量,則喚醒它們。 ? 信號量其實是含有一個或多個信號量值的集合。 ? 調用的函數 semget創(chuàng)建信號量,獲得一個信號量ID。 include sys/ include sys/ include sys/ int semget(key_t key, int nsems, int flag)。 返回:若成功則返回信號量 ID,若出錯則為 1 nsems是該集合中的信號量數。如果是創(chuàng)建新集合,則必須指定 nsems。如果引用一個現存的集合,則將 nsems指定為 0。 雙態(tài)信號量 (binary semaphore) ? 信號量的初值可以是任一正值,該值說明有多少個共享資源單位可供共享應用。 ? 常用的信號量形式被稱之為雙態(tài)信號量(binary semaphore)。它控制單
點擊復制文檔內容
教學課件相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1