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

正文內(nèi)容

c語言進程間通信(編輯修改稿)

2025-01-15 19:24 本頁面
 

【文章內(nèi)容簡介】 ? 每個結(jié)構(gòu)體都是系統(tǒng)全局的,但是沒有引用計數(shù),不會被自動移除,容易因為編程不嚴(yán)格造成內(nèi)存泄露 ? 無法通過 ls chmod等命令訪問到 ? 增加命令 ipcs和 ipcrm ? 不是文件描述符,無法使用高級 IO 消息隊列 ? 概述 ? 消息隊列是存在內(nèi)核當(dāng)中帶 ID的消息鏈表 ? 用戶可以從消息隊列中添加消息、讀取消息。具有一定的 FIFO特性,但可以實現(xiàn)消息的隨機查詢 ? 這些消息存在于內(nèi)核中,由“隊列 ID”來標(biāo)識 ? 消息隊列的實現(xiàn) ? 消息隊列的實現(xiàn)包括創(chuàng)建和打開消息隊列、添加消息、讀取消息和控制消息隊列 ? 創(chuàng)建或打開消息隊列: msgget。這里創(chuàng)建的消息隊列的數(shù)量會受到消息隊列數(shù)量的限制 ? 添加消息: msgsnd函數(shù),它把消息添加到已打開的消息隊列末尾 ? 讀取消息: msgrcv,它把消息從消息隊列中取走,與 FIFO不同的是,這里可以指定取走某一條消息 ? 控制消息隊列: msgctl ? int msgget(key_t, int flag) ? 返回消息隊列的 id ? 錯誤返回 1 ? msgget函數(shù)用于創(chuàng)建新的消息隊列或打開已有隊列 消息隊列 ? 每個消息隊列都有一個 msgid_des結(jié)構(gòu)表示當(dāng)前狀態(tài) 消息隊列 int msgsnd(int msqid, const void *ptr, size_t nbytes, int flag) ? 把一個新的消息添加到消息隊列尾部 ? 正確返回 0,錯誤返回 1 ? 每個消息有一個長整型表示類型,一個非負(fù)的長度和實際的數(shù)據(jù)長度 ? 標(biāo)志位可以指定 IPC_NOWAIT 指定非阻塞后,如果消息隊已滿, msgsnd立即返回錯誤 EAGAIN ? 若未指定阻塞標(biāo)志, msgsnd將會一直阻塞直到有空間放消息為止 ? 如果在阻塞過程中,消息隊列被移除,返回錯誤 EIDRM ? 如果在阻塞過程中被信號打斷,返回錯誤 EINTR ? ptr指向 mymesg結(jié)構(gòu)體 消息隊列 ? int msgrcv(int msqid, void *ptr, size_t nbytes, long type,int flag) ? 從消息隊列上取消息,返回消息中的數(shù)據(jù)部分大小 ? ptr指向 mymesg結(jié)構(gòu)類型, nbytes指定緩沖區(qū)大小 ? 如果返回值比 nbytes大并且 flag設(shè)置了 MSG_NOERROR消息就會被截取,否則返回錯誤 E2BIG ? type用于指定按類型取 ? =0 取隊列上第一個消息 ? 取隊列上類型等于 type的第一個消息 ? 0 取隊列上類型小于等于 type絕對值的第一個消息 消息隊列 ? int msgctl(int msqid, int cmd, struct msqid_des *buf) ? 正確返回 0 ? 錯誤返回 1 ? 命令選項 ? IPC_STAT 取得當(dāng)前狀態(tài) ? IPC_SET 設(shè)置 , , , and msg_qbytes 能被有效用戶 ID是 或 。長度只能被超級用戶修改 ? IPC_RMID 移除消息隊列和所有消息,只能被有效用戶 ID是 或 信號量 ? 信號量是由荷蘭科學(xué)家 Dijkstra提出的 , 是一種卓有成效的進程同步機制 。 ? 原理與進程同步一節(jié)講的相同 ,但較復(fù)雜 ? 不是一個單獨的值 , 需要定義一個信號量集合 ? 創(chuàng)建信號量與初始化是獨立的過程 , 無法原子完成 ? 不會自動移除 , 可能造成內(nèi)存泄露 ? 每個信號量在內(nèi)核中都有一個 semid_ds結(jié)構(gòu) 信號量 int semget(key_t key, int nsems, int flag) ? 功能:創(chuàng)建一個新的信號量或取得一個新的信號量 ? 返回值:成功返回信號量標(biāo)志碼,失敗返回 1。 ? 參數(shù): key,整型值,其它進程訪問信號量的依據(jù)。 nsems,信號量個數(shù),一般為 1。 semflg,標(biāo)志,類似 open()的標(biāo)志,相當(dāng)于文件的訪問權(quán)限 信號量 ? int semop(int semid, struct sembuf semoparray[ ], size_t nops) ? 正確返回 0, 錯誤返回 1 ? 用于在信號量集合上執(zhí)行一組操作 ,改變信號量的值 ? 參數(shù): semid,信號量標(biāo)志碼。 sops,結(jié)構(gòu)體指針,包含了具體操作。 nsops,結(jié)構(gòu)體數(shù)量,等于 1。 信號量 struct sembuf { unsigned short sem_num。 short sem_op。 short sem_flg。 }。 ? 這三個字段的意義分別為: ? sem_num:操作信號在信號集中的編號,第一個信號的編號是 0。 ? sem_op:如果其值為正數(shù),該值會加到現(xiàn)有的信號內(nèi)值中。通常用于釋放所控資源的使用權(quán);如果 sem_op的值為負(fù)數(shù),而其絕對值又大于信號的現(xiàn)值,操作將會阻塞,直到信號值大于或等于 sem_op的絕對值。通常用于獲取資源的使用權(quán);如果 sem_op的值為 0,則操作將暫時阻塞,直到信號的值變?yōu)?0。 ? sem_flg:信號操作標(biāo)志,可能的選擇有兩種 ? IPC_NOWAIT //對信號的操作不能滿足時, semop()不會阻塞,并立即返回,同時設(shè)定錯誤信息。 ? IPC_UNDO //程序結(jié)束時 (不論正?;虿徽?),保證信號值會被重設(shè)為semop()調(diào)用前的值。這樣做的目的在于避免程序在異常情況下結(jié)束時未將鎖定的資源解鎖,造成該資源永遠(yuǎn)鎖定。 信號量 int semctl(int semid, int semnum, int cmd … … /* union semun arg */) ? 功能:控制信號量信息。 ? 返回值:成功返回 0,否則 1。 ? 參數(shù): semid,信號量標(biāo)志碼。 semnum,信號量編號。 cmd,要進行的操作。 第四個參數(shù),是 union semun的實例,具體值依賴 __cmd。 信號量 ? 命令個數(shù)比較多 ? IPC_STAT 取得信號量集合的 semid_ds結(jié)構(gòu) ,存在 區(qū)域 ? IPC_SET 設(shè)置 , , and ? IPC_RMID 從系統(tǒng)移除信號量集合 ? GETALL 取得所有信號量值 , 存在 ? SETALL 設(shè)置所有信號量值 , 從 具有依賴關(guān)系的作業(yè)調(diào)度問題 ? 設(shè) P P P PP P6為 一組合作進程,其前驅(qū)圖如下右圖所示。七個同步信號量 a、 b、 c、 d、e、 f、 g分別表示進程之間的前驅(qū)關(guān)系,如圖所示 , 其初值均為 0。這六個進程的同步描述如下: P1 P2 P6 P4
點擊復(fù)制文檔內(nèi)容
語文相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1