system v訊息佇列msgctl函式
阿新 • • 發佈:2018-12-14
/*msgctl函式建立訊息佇列*/ //第一個引數為訊息佇列的標示符msgid //第二個引數為執行動作,,,IPC_RMID //第三個為訊息佇列結構體 #include <unistd.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <stdlib.h> #include <stdio.h> #include <errno.h> #define ERR_EXIT(m) do \ { \ perror(m); \ exit(EXIT_FAILURE); \ }while(0) int main(void) { int msgid; msgid = msgget(1234, 0666 | IPC_CREAT | IPC_EXCL); msgid = msgget(1234, 0);//0可以開啟任何許可權的訊息佇列,只打開不建立 if(msgid == -1) { ERR_EXIT("msgget"); } printf("msgget success\n"); //msgctl(msgid, IPC_RMID, NULL);//刪除當前開啟的訊息佇列 struct msgid_ds buf;//訊息佇列結構體 msgctl(msgid, IPC_STAT, &buf);//獲取訊息佇列結構體中的內容 printf("mode = %o\n", buf.msg_perm.mode); sscanf("600", "%o", (unsigned int*)&buf.msg_perm.mode); msgctl(msgid, IPC_SET, &buf)//先獲取結構體,再修改其內容 return 0; }