UNIX C XSI_IPC對象、共享內存
阿新 • • 發佈:2017-11-09
include rdo -- ipc 內存 gid 命令 mdt 用戶id
1.創建IPC對象
#include <sys/ipc.h> key_t ftok(const char* pathname,int proj_id); 成功返回可用於創建或獲取IPC的鍵,失敗則返回-1
2.創建、獲取共享內存
#include <sys/shm.h> int shmget(key_t key,size_t size,int shmflg); 成功返回共享內存標誌符,失敗返回-1 --key:共享內存鍵 --size:共享內存大小 --shmflg:創建標誌,可取以下值 0 -獲取,不存在即失敗 IPC_CREAT-創建,不存在即創建,已存在即獲取 IPC_EXCL -排斥,已存在即失敗
3.加載共享內存
#include <sys/shm.h> void* shmat(int shmid,const void* shmaddr,int shmflg); 成功返回共享內存起始地址,失敗返回-1 --shmid:共享內存標誌符 --shmaddr:指定映射地址,可置NULL,由系統自動選擇 --shmflg:加載標誌 0 -以讀寫方式使用共享內存 SHM_RDONLY - 以只讀方式使用共享內存 SHM_RND - 只在shmaddr參數非NULL時起作用
4.卸載共享內存
#include <sys/shm.h> int shmdt(const void* shmaddr); 成功返回0,失敗返回-1 --shmaddr:共享內存起始地址
5.銷毀/控制共享內存
#include <sys/shm.h> int shmctl(int shmid,int cmd,struct shmid_ds* buf); 成功返回0,失敗返回-1 --shmid:共享內存標誌符 --cmd:控制命令,可取以下值 IPC_STAT -獲取共享內存的屬性,通過buf參數輸出 IPC_SET -設置共享內存的屬性,通過buf參數輸入,僅以下三個屬性可以設置 shmid_ds::shm_perm.uid//擁有者用戶ID shmid_ds::shm_perm.gid//擁有者組ID shmid_ds::shm_perm.mode//權限 IPC_RMID -銷毀共享內存。不是真的銷毀,只是做個銷毀標記,禁止任何進程對該共享內存形成新的加載 -buf:shmid_ds類型的共享內存屬性結構
6.消息隊列
創建/獲取消息隊列
#include <sys/msg.h> int msgget(key_t key,int msgflg); 成功返回消息隊列標誌符,失敗返回-1 -key:消息隊列鍵 -msgflg:創建標誌,可取以下值 0 -獲取,不存在即失敗 IPC_CREAT :創建,不存在即失敗 IPC_EXCL -排斥,已存在即失敗
發送消息
#include <sys/msg.h> int msgsnd (int msqid,const void* msgp,size_t msgsz,int msgflg); 成功返回0,失敗返回-1 -msqid:消息隊列標誌符 -msgp:指向一個包含消息類型和消息數據的內存塊。 -msgsz:期望發送消息數據的字節數 -msgflg :發送標誌,一般取0即可
接收消息
#include <sys/msg.h> ssize_t msgrcv (int msqid,void* msgp,size_t msgsz,long msgtyp,int msgflg); 成功返回所接收消息數據的字節數,失敗返回-1 --msqid:消息隊列標誌符 --msgp:指向一塊包含消息類型(4字節)和消息數據的內存 --msgsz :期望接收消息數據的字節數
銷毀或控制消息隊列
#include <sys/msg.h> int msgctl(int msqid,int cmd,struct msqid_ds* buf); 成功返回0,失敗返回-1 -msqid:消息隊列標誌符 --cmd:控制命令,可取以下值
IPC_STAT -獲取共享內存的屬性,通過buf參數輸出
IPC_SET -設置共享內存的屬性,通過buf參數輸入,僅以下三個屬性可以設置
shmid_ds::shm_perm.uid//擁有者用戶ID
shmid_ds::shm_perm.gid//擁有者組ID
shmid_ds::shm_perm.mode//權限
IPC_RMID -銷毀共享內存。不是真的銷毀,只是做個銷毀標記,禁止任何進程對該共享內存形成新的加載
-buf:shmid_ds類型的共享內存屬性結構
7.信號量
創建\獲取信號量集
#include <sys.sem.h> int semget (key_t key,int nsems,int semflg); 成功返回信號量集標誌符,失敗返回-1 -key :信號量集鍵 -nsems:信號量個數 -semflg:創建標誌,可取以下值 0 -獲取,不存在即創建,已存在即獲取 IPC_CREAT -創建,不存在即創建,已存在即獲取 IPC_EXCL -排斥,已存在即失敗
操作信號量集
#include <sys.sem.h> int semop(int semid,struct sembuf* sops,unsigned nsops); 成功返回0,失敗返回-1 -semid:信號量集標誌符 -sops:操作結構體數組 -nsops:操作結構體數組的長度 struct sembuf{ unsigned short sem_num;//信號量編號 short sem_op;//操作數 short sem_flg;//操作標誌 };
銷毀\控制信號量集
#include <sys/sem.h> int semctl(int semid,int semnum,int cmd,....); 成功返回0(cmd取某些值時存在例外),失敗返回-1 -semid:信號量集標誌符 -semnum:信號量編號 -cmd:控制命令
UNIX C XSI_IPC對象、共享內存