第三階段知識回顧(4)

2021-10-23 22:24:43 字數 2827 閱讀 3630

int msgget(key_t key ,int msgfls)建立訊息佇列

引數1:key_t key;//暗號鍵值

引數2:建立訊息佇列許可權(ipc_creat|| )

2,int msgsnd(int msgid,const void *msg_ptr,size_t msg_sz,int msg***)

往訊息佇列傳送訊息

引數1:哪乙個訊息佇列 msgid是由msgget函式返回的訊息佇列識別符號。

引數2:msg_ptr是乙個指向準備傳送訊息的指標,但是訊息的資料結構卻有一定的要求,指標msg_ptr所指向的訊息結構一定要是以乙個長整型成員變數開始的結構體,接收函式將用這個成員來確定訊息的型別。:

引數3:msg_sz是msg_ptr指向的訊息的長度,注意是訊息的長度,而不是整個結構體的長度,也就是說msg_sz是不包括長整型訊息型別成員變數的長度。

引數4:msg***用於控制當前訊息佇列滿或佇列訊息到達系統範圍的限制時將要發生的事情

3.int msgrcv(int msgid,void *msg_ptr, size_t msg_sz,long int msgtype, int msg***);

接受訊息佇列裡面資訊

引數1:哪乙個訊息佇列 msgid是由msgget函式返回的訊息佇列識別符號。

引數2:msg_ptr是乙個指向準備傳送訊息的指標,但是訊息的資料結構卻有一定的要求,指標msg_ptr所指向的訊息結構一定要是以乙個長整型成員變數開始的結構體,接收函式將用這個成員來確定訊息的型別。:

引數3:msg_sz是msg_ptr指向的訊息的長度,注意是訊息的長度,而不是整個結構體的長度,也就是說msg_sz是不包括長整型訊息型別成員變數的長度。

引數4:msgtype可以實現一種簡單的接收優先順序。如果msgtype為0,就獲取佇列中的第乙個訊息。如果它的值大於零,將獲取具有相同訊息型別的第乙個資訊。如果它小於零,就獲取型別等於或小於msgtype的絕對值的第乙個訊息。

引數5:msg***用於控制當前訊息佇列滿或佇列訊息到達系統範圍的限制時將要發生的事情

呼叫成功時,該函式返回放到接收快取區中的位元組數,訊息被複製到由msg_ptr指向的使用者分配的快取區中,然後刪除訊息佇列中的對應訊息。失敗時返回-1.

4,int msgctl(int mspid ,int command,strcut msqid_ds*buf) 控制函式

刪除訊息佇列

函式的第乙個引數msgqid 是訊息佇列物件的識別符號。

第二個引數是函式要對訊息佇列進行的操作,它可以是:

ipc_stat

取出系統儲存的訊息佇列的msqid_ds 資料,並將其存入引數buf 指向的msqid_ds 結構

中。ipc_set

設定訊息佇列的msqid_ds 資料中的msg_perm 成員。設定的值由buf 指向的msqid_ds

結構給出。

ipc_rmid

將佇列從系統核心中刪除。

第三個引數:buf是指向msgid_ds結構的指標,它指向訊息佇列模式和訪問許可權的結構。

1.int shmget(key_t key, size_t size, int shm***)建立共享記憶體

如果成功返回共享記憶體的id號

引數一key 會建立新共享記憶體物件 ,對方要有相同的key值才能夠讀取資料

引數 shm*** 是操作標誌位,它的一些巨集定義如下:

ipc_create : 呼叫 shmget 時,系統將此值與其他共享記憶體區的 key 進行比較,如果存在相同的 key ,說明共享記憶體區已存在,此時返回該共享記憶體區的識別符號,否則新建乙個共享記憶體區並返回其識別符號。

ipc_excl : 該巨集必須和 ipc_create 一起使用,否則沒意義。當 shm*** 取 ipc_create | ipc_excl 時,如果沒有該塊共享記憶體則建立,如果發現記憶體區已經存在則返回 -1,錯誤**為 eexist 。

2. shmat 將共享記憶體與程序相連線,將這個記憶體對映到本程序的虛擬記憶體空間

void *shmat(int shmid, const void *shmaddr, int shm***)

shmid 共享記憶體識別符號 shmget成功建立或者開啟後返回的值,就是shmid

shmaddr:指定共享記憶體出現在程序記憶體位址的什麼位置,直接指定為null讓核心自己決定乙個合適的位址位置

shm***:shm_rdonly:為唯讀模式,其他為讀寫模式

返回值:

出錯:-1,錯誤原因存於error中

成功:附加好的共享記憶體位址

3.shmdt 刪除本程序的這塊記憶體,解除對映

與shmat函式相反,是用來斷開與共享記憶體附加點的位址,禁止本程序訪問此片共享記憶體

int shmdt(const void *shmaddr)

shmaddr:連線的共享記憶體的起始位址

返回值:

出錯:-1,錯誤原因存於error中

成功:0

4.shmctl(共享記憶體管理)完成對共享記憶體的控制

int shmctl(int shmid, int cmd, struct shmid_ds *buf)

引數1 :shmid 共享記憶體識別符號 shmget成功建立或者開啟後返回的值,就是shmid

引數2:cmd:

ipc_stat:得到共享記憶體的狀態,把共享記憶體的shmid_ds結構複製到buf中

ipc_set:改變共享記憶體的狀態,把buf所指的shmid_ds結構中的uid、gid、mode複製到共享記憶體的shmid_ds結構內

ipc_rmid:刪除這片共享記憶體

引數3:buf:共享記憶體管理結構體。具體說明參見共享記憶體核心結構定義部分

返回值:

成功:0

出錯:-1,錯誤原因存於error中

第三階段知識回顧(1)

標準i o 標準i o是ansi c建立的乙個標準i o模型,是乙個標準函式包和stdio.h標頭檔案中的定義,具有一定的可移植性。標準i o庫處理很多細節。例如快取分配,以優化長度執行i o等。標準的i o提供了三種型別的快取。1 全快取 當填滿標準i o快取後才進行實際的i o操作。2 行快取 ...

JSP 第三階段

又是元氣滿滿的一天,啦啦啦.開始正文 知識點一 out 物件 jsp的內建物件 特點 無需例項化即可使用 作用 實現資料的輸出顯示 方法 print 向頁面輸出顯示。println 向頁面輸出顯示,在原始碼裡會換行。注 頁面顯示的不會換行 知識點二 面試常問點 九大內建物件 jsp jsp已經準備好...

第三階段返程

早晨6點20起床,這是這些天來起的最早的一次,在鬧鈴響之前就醒了,證明只要心有所想是完全可以做到的,這是心理暗示的強大作用,以後要多用於其他方面。是發票改革的原因嗎?前幾次都是離店在前台直接結算開發票,現在改到財務部,週六日還不上班,給住店帶來不少麻煩,怎麼越改越不人性化呢?隨行的同事買的蘋果,每人...