Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5520171
  • 博文数量: 763
  • 博客积分: 12108
  • 博客等级: 上将
  • 技术积分: 15717
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-28 21:21
个人简介

业精于勤,荒于嬉

文章分类

全部博文(763)

文章存档

2018年(6)

2017年(15)

2016年(2)

2015年(31)

2014年(14)

2013年(87)

2012年(75)

2011年(94)

2010年(190)

2009年(38)

2008年(183)

2007年(28)

分类: LINUX

2007-12-05 11:48:16

/*msgserver.c*/

#include
#include
#include
#include
#include
#include
#include

#define   MSG_FILE "msgserver.c"
#define   BUFFER 255
#define   PERM S_IRUSR|S_IWUSR
/* 服务端创建的消息队列最后没有删除,我们要使用ipcrm命令来删除的 */
/* ipcrm -q */

struct msgtype {
    long mtype;
    char buffer[BUFFER+1];
};

int main()
{
    struct msgtype msg;
    key_t key;
    int msgid;
   
    if((key=ftok(MSG_FILE,'a'))==-1)
    {
        fprintf(stderr,"Creat Key Error:%s\n", strerror(errno));
        exit(1);
    }

    if((msgid=msgget(key, PERM|IPC_CREAT|IPC_EXCL))==-1)
    {
        fprintf(stderr, "Creat Message Error:%s\n", strerror(errno));
        exit(1);
    }
    printf("msqid = %d\n", msgid);
    while(1)
    {
        msgrcv(msgid, &msg, sizeof(struct msgtype), 1, 0);
        fprintf(stderr,"Server Receive:%s\n", msg.buffer);
        msg.mtype = 2;
        msgsnd(msgid, &msg, sizeof(struct msgtype), 0);
    }
    exit(0);
}

/* msgclient.c */

#include
#include
#include
#include
#include
#include
#include
#include

#define   MSG_FILE "msgserver.c"
#define   BUFFER 255
#define   PERM S_IRUSR|S_IWUSR

struct msgtype {
    long mtype;
    char buffer[BUFFER+1];
};

int main(int argc, char **argv)
{
    struct msgtype msg;
    key_t key;
    int msgid;
   
    if(argc != 2)
    {
        fprintf(stderr,"Usage:%s string\n", argv[0]);
        exit(1);
    }
   
    if((key=ftok(MSG_FILE,'a'))==-1)
    {
        fprintf(stderr,"Creat Key Error:%s\n", strerror(errno));
        exit(1);
    }
   
    if((msgid=msgget(key, PERM))==-1)
    {
        fprintf(stderr,"Creat Message  Error:%s\n", strerror(errno));
        exit(1);
    }
   
    msg.mtype = 1;
    strncpy(msg.buffer, argv[1], BUFFER);
    msgsnd(msgid, &msg, sizeof(struct msgtype), 0); 
    memset(&msg, '\0', sizeof(struct msgtype));
    msgrcv(msgid, &msg, sizeof(struct msgtype), 2, 0);
    fprintf(stderr, "Client receive:%s\n", msg.buffer);
    exit(0);
}  

阅读(2283) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~