コード例 #1
0
ファイル: opmsg.c プロジェクト: edsionte/edsionte-code
int main()
{
	struct mymsgbuf
	{
		long msgtype;
		char ctrlstring[BUF_SIZE];
	}msgbuffer;

	int qid;
	int msglen;
	key_t msgkey;
	struct msqid_ds msq_attr;

	if((msgkey=ftok(PATH_NAME,PROJ_ID))==-1)
	{
		perror("ftok error!\n");
		exit(1);
	}

	if((qid=msgget(msgkey,IPC_CREAT|0666))==-1)
	{
		perror("msgget error!\n");
		exit(1);
	}
	getmsgattr(qid,msq_attr);

	msgbuffer.msgtype=2;
	strcpy(msgbuffer.ctrlstring,"Another message");
	msglen=sizeof(struct mymsgbuf)-4;
	if(msgsnd(qid,&msgbuffer,msglen,0)==-1)
	{
		perror("msgget error\n");
		exit(1);
	}

	getmsgattr(qid,msq_attr);

	msq_attr.msg_perm.uid=3;
	msq_attr.msg_perm.gid=2;
	if(msgctl(qid,IPC_SET,&msq_attr)==-1)
	{
		perror("msg set error\n");
		exit(1);
	}

	getmsgattr(qid,msq_attr);
	if(msgctl(qid,IPC_RMID,NULL)==-1)
	{
		perror("delete msg error\n");
		exit(1);
	}

	getmsgattr(qid,msq_attr);
	exit(0);
}
コード例 #2
0
ファイル: opmsg.c プロジェクト: gitliuyuhan/APUE
int main()
{
    //自定义消息缓冲区
    struct mymsgbuf
    {
        long      msgtype;
        char      msgstring[BUF_SIZE];
    }msgbuffer;

    int             msgid;         //消息队列标识符
    int             msglen;        //消息长度
    key_t           msgkey;        //消息队列关键字
    struct msqid_ds msg_attr;      //属性

    //获取键值
    if((msgkey = ftok(PATH_NAME,PROJ_ID)) == -1 )
    {
        perror("ftok error!\n");
        exit(1);
    }

    //获取消息队列标识符
    if((msgid = msgget(msgkey,IPC_CREAT|0660)) == -1)
    {
        perror("msgget error!\n");
        exit(1);
    }

    //输出消息队列的属性
    getmsgattr(msgid,msg_attr);

    //发送一条消息到消息队列
    msgbuffer.msgtype = 2;
    strcpy(msgbuffer.msgstring,"hello,world");
    msglen = sizeof(struct mymsgbuf);

    if(msgsnd(msgid,&msgbuffer,msglen,0) == -1)
    {
        perror("msgsnd error!\n");
        exit(1);
    }

    //输出消息队列属性
    getmsgattr(msgid,msg_attr);

    //设置消息队列属性
    msg_attr.msg_perm.uid = 3;
    msg_attr.msg_perm.gid = 2;

    if(msgctl(msgid,IPC_SET,&msg_attr) == -1)
    {
        perror("msg set error!\n");
        exit(1);
    }

    //输出修改后的属性
    getmsgattr(msgid,msg_attr);

    //从内核中删除消息队列
    if(msgctl(msgid,IPC_RMID,NULL) == -1)
    {
        perror("delete msg error!\n");
        exit(1);
    }

    //输出删除后的属性
    getmsgattr(msgid,msg_attr);

    exit(0);
}