Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7520
  • 博文数量: 14
  • 博客积分: 250
  • 博客等级: 二等列兵
  • 技术积分: 95
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-13 01:08
文章分类
文章存档

2011年(14)

我的朋友
最近访客

分类: IT职场

2011-01-13 18:03:09

  1. comm.h文件内容如下:
    1. #ifndef COMM_H
    2. #define COMM_H
    3. #define KEYPATH "/etc/hosts"
    4. #define KEYPROJ 's'
    5. #define NAMESIZE 64
    6. #define NAMESIZE 64
    7. struct score_st
    8. {
    9.         long mtype;
    10.         char name[NAMESIZE];
    11.         int math;
    12.         int chinese;
    13. };
    14. #endif
  2. rcv.c文件内容如下:
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <unistd.h>
  6. #include <sys/ipc.h>
  7. #include <sys/msg.h>
  8. #include <string.h>
  9. #include "comm.h"
  10. int main()
  11. {
  12.         struct score_st rbuf;
  13.         int i, ret;
  14.         key_t key;
  15.         int msgid;
  16.         key = ftok(KEYPATH, KEYPROJ);
  17.         if(key < 0)
  18.         {
  19.                 perror("ftok() error");
  20.                 exit(1);
  21.         }
  22.         for(i = 0; i < 5; ++i)
  23.         {
  24.                 msgid = msgget(key, IPC_CREAT|0600);
  25.                 if(msgid < 0)
  26.                 {
  27.                         perror("msgget() error" );
  28.                         exit(1);
  29.                 }
  30.                 if(msgrcv(msgid, &rbuf, sizeof(rbuf) - sizeof(long), 0, 0) < 0)
  31.                 {
  32.                         perror("msgrcv() error");
  33.                         exit(1);
  34.                 }
  35.                 printf("========================\n");
  36.                 printf("Name: %s\n", rbuf.name);
  37.                 printf("Math: %d\n", rbuf.math);
  38.                 printf("Chinese: %d\n", rbuf.chinese);
  39.                 printf("========================\n");
  40.         }
  41.                 msgctl(msgid, IPC_RMID, 0);
  42.                 exit(0);
  43. }

snd.c文件内容如下:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <string.h>
  5. #include <sys/ipc.h>
  6. #include <sys/types.h>
  7. #include <sys/msg.h>
  8. #include "comm.h"
  9. int main()
  10. {
  11.         int ret;
  12.         key_t key;
  13.         int msgid;
  14.         struct score_st sbuf;
  15.         key = ftok(KEYPATH, KEYPROJ);
  16.         if(key < 0)
  17.         {
  18.                 perror("ftok() error");
  19.                 exit(1);
  20.         }
  21.         msgid = msgget(key, 0);
  22.         if(msgid < 0)
  23.         {
  24.                 perror("msgget() error");
  25.                 exit(1);
  26.         }
  27.         sbuf.mtype = 1;
  28.         strcpy(sbuf.name, "Zhangsan");
  29.         sbuf.math = rand()%150;
  30.         sbuf.chinese = rand()%150;
  31.         ret = msgsnd(msgid ,&sbuf, sizeof(sbuf)-sizeof(long), 0);
  32.         if(ret < 0)
  33.         {
  34.                 perror("msgsnd() error");
  35.                 exit(1);
  36.         }
  37.         puts("OK");
  38.         exit(0);
  39. }


阅读(261) | 评论(0) | 转发(0) |
0

上一篇:APUE学习笔记 标准I/O库 显示文件每行的长度

下一篇:没有了

给主人留下些什么吧!~~