1. 程式人生 > >system v訊息佇列msgctl函式

system v訊息佇列msgctl函式

/*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;
}