標籤:style blog http ar 使用 sp 檔案 資料 on
共用記憶體和訊息佇列也是進程間的通訊方式。
共用記憶體,(和訊號量的操作類似)
#include<sys/shm.h>
1、int shmget(key_t key,size_t size,int shmflg);
作用:建立一塊記憶體或者返回已建好的記憶體
參數:key,用於表示開闢一段記憶體,各進程通過這個標誌訪問同一塊記憶體
size,記憶體的大小
shmflg,和檔案操作完全相同許可權表示,按位或IPC_CREATE表示建立一塊記憶體,如果key表示的記憶體已經建立,即使加了IPC_CREATE也不會建立一塊記憶體,會返回key關聯的記憶體。
傳回值:返回一個標示符,其他對共用記憶體的操作,用到該傳回值
2、void *shmat(int shm_id,const void * shm_addr,int shmflg);
作用:講一段共用記憶體串連到當前進程
參數:shm_id,shmget的傳回值
shm_addr串連到當前進程的地址位置,一般為NULL,表示讓系統來選擇
shmfig:SHM_RND,與shm_addr聯合使用,控制串連地址
SHM_RDONLY,唯讀
一般設為0
傳回值:指向共用記憶體第一位元組的指標
3、int shmdt(const void * shm_addr);
作用:將共用記憶體從當前進程分離出去
參數:shmat的傳回值
4、int shmctl(int shm_id,int command,struct shmid_ds * buf);
structshmid_ds {
uid_t shm_perm.uid;
uid_t shm_perm.gid;
mode_t shm_prem.mode;
}
作用:對共用記憶體的控制
參數:shm_id,shm_get的傳回值
commond,IPC_STAT:把shmid_ds中的值設為當前共用記憶體狀態值
IPC_SET:把共用記憶體狀態設為shmid_ds中的值
IPC_RMID:刪除共用記憶體段
訊息佇列
#include<sys/msg.h>
1、int msgget(key_t key,int msgflg);
作用:建立和訪問一個訊息佇列
參數:key,索引值表示一個訊息佇列
msgflg,許可權標誌位,與shmget標誌位類似
傳回值:返回一個描述符,用於其他訊息佇列函數中
2、int msgsnd(int msqid,const void * msg_ptr,size_t msg_sz,int msgflg);
一般把訊息用下邊結構體表示
struct my_message{
long int message_type;//表示資料類型
/*The data you wish to transfer*/
}
作用:把訊息添加到訊息佇列
參數:msqid,msgget的傳回值
msg_ptr,指向準備發送訊息的指標
msg_sz,訊息長度不包括長整形訊息類型變數
msgflg控制當前隊列滿或達到系統最大限度時發生的事情,一般設為0
3、int msgrcv(int msqid,void * msg_ptr,size_t msg_sz,long intmsgtype,int msgflg);
作用:從訊息佇列中接收訊息
參數:msqid,msgget函數的傳回值
msg_ptr,指向準備接收訊息的指標
msg_sz,接受訊息的大小,不包括表示類型的第一個變數
msgtype,接受類型
msgflg,控制沒有訊息接收時發生的事情,一般設為0
5、int msgctl(int msqid,int commond,struct msqid_ds * buf);
structmsqid_ds {
uid_t msg_perm.uid;
uid_t msg_perm.gid;
mode_t msg_perm.mode;
}
http://blog.csdn.net/coderlrx/article/details/8762017
第二十三天:共用記憶體.訊息佇列及mysql資料庫使用