• IOday8


    1. #include
    2. //要发送数据的结构体类型
    3. struct msgbuf {
    4. long mtype; /* 消息类型*/
    5. char mtext[1024]; /* 正文数据 */
    6. };
    7. //宏定义正文大小
    8. #define SIZE sizeof(struct msgbuf)-sizeof(long)
    9. int main(int argc, const char *argv[])
    10. {
    11. key_t key;
    12. if((key=ftok("./",'k'))==-1)
    13. {
    14. ERR_MSG("ftok");
    15. return -1;
    16. }
    17. //2.通过key值创建消息队列
    18. int msgid;//消息队列号
    19. if((msgid=msgget(key,IPC_CREAT|0664)) ==-1 )
    20. {
    21. ERR_MSG("msgid");
    22. return -1;
    23. }
    24. pid_t pid =fork();
    25. if(pid<0)
    26. {
    27. ERR_MSG("fork");
    28. }else if(pid==0)//子进程控制消息队列发送
    29. {
    30. //3.向消息队列中发送数据
    31. struct msgbuf info;
    32. info.mtype=100;//设置信道为100 第二个文件只能读取信道为100的消息
    33. while(1)
    34. {
    35. //清空数组中内容
    36. bzero(info.mtext,sizeof(info.mtext));
    37. fgets(info.mtext,SIZE,stdin);//从终端读取数据
    38. info.mtext[strlen(info.mtext)-1]=0;//将'\n'转化为'\0'
    39. //调用发送函数
    40. msgsnd(msgid,&info,SIZE,IPC_NOWAIT);
    41. //参数1:向哪个消息队列中发数据
    42. //参数2:要发送消息的地址
    43. //参数3:要发送消息的正文大小
    44. //参数4:阻塞形式发送
    45. if(strcmp(info.mtext,"quit")==0)
    46. {
    47. break;
    48. }
    49. }
    50. }else//父进程控制,接收
    51. {
    52. struct msgbuf info;
    53. while(1)
    54. {
    55. //清空数组中内容
    56. bzero(info.mtext,sizeof(info.mtext));
    57. //调用接收函数
    58. msgrcv(msgid,&info,SIZE,50,0);
    59. //参数1:向哪个消息队列中发数据
    60. //参数2:要发送消息的地址
    61. //参数3:50,表示读取信道为50的
    62. //参数4:表示阻塞接收
    63. printf("消息为:%s\n",info.mtext);
    64. }
    65. }
    66. return 0;
    67. }
    1. #include
    2. //要发送数据的结构体类型
    3. struct msgbuf {
    4. long mtype; /* 消息类型*/
    5. char mtext[1024]; /* 正文数据 */
    6. };
    7. //宏定义正文大小
    8. #define SIZE sizeof(struct msgbuf)-sizeof(long)
    9. int main(int argc, const char *argv[])
    10. {
    11. key_t key;
    12. if((key=ftok("./",'k'))==-1)
    13. {
    14. ERR_MSG("ftok");
    15. return -1;
    16. }
    17. //2.通过key值创建消息队列
    18. int msgid;//消息队列号
    19. if((msgid=msgget(key,IPC_CREAT|0664)) ==-1 )
    20. {
    21. ERR_MSG("msgid");
    22. return -1;
    23. }
    24. pid_t pid =fork();
    25. if(pid<0)
    26. {
    27. ERR_MSG("fork");
    28. }else if(pid==0)//子进程控制消息队列发送
    29. {
    30. //3.向消息队列中发送数据
    31. struct msgbuf info;
    32. info.mtype=50;//设置信道为100 第二个文件只能读取信道为100的消息
    33. while(1)
    34. {
    35. //清空数组中内容
    36. bzero(info.mtext,sizeof(info.mtext));
    37. fgets(info.mtext,SIZE,stdin);//从终端读取数据
    38. info.mtext[strlen(info.mtext)-1]=0;//将'\n'转化为'\0'
    39. //调用发送函数
    40. msgsnd(msgid,&info,SIZE,IPC_NOWAIT);
    41. //参数1:向哪个消息队列中发数据
    42. //参数2:要发送消息的地址
    43. //参数3:要发送消息的正文大小
    44. //参数4:阻塞形式发送
    45. if(strcmp(info.mtext,"quit")==0)
    46. {
    47. break;
    48. }
    49. }
    50. }else//父进程控制,接收
    51. {
    52. struct msgbuf info;
    53. while(1)
    54. {
    55. //清空数组中内容
    56. bzero(info.mtext,sizeof(info.mtext));
    57. //调用接收函数
    58. msgrcv(msgid,&info,SIZE,100,0);
    59. //参数1:向哪个消息队列中发数据
    60. //参数2:要发送消息的地址
    61. //参数3:50,表示读取信道为50的
    62. //参数4:表示阻塞接收
    63. printf("消息为:%s\n",info.mtext);
    64. }
    65. }
    66. return 0;
    67. }

  • 相关阅读:
    Java 序列化和反序列化为什么要实现 Serializable 接口?
    Chromium 调试指南2024 Mac篇 - 编译 Chromium(二)
    javaVUE技术小区车辆档案车位管理系统设计与实现计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
    Maven进阶-分模块开发与设计
    《大厂高并发分布式锁从入门到实战》之第3讲
    ZZNUOJ_用C语言编写程序实现1342:支配值数目(附完整源码)
    二维矩阵的DFS算法框架
    使用Kubernetes和Docker部署Java微服务
    前端需要学习哪些技术?
    CONTINUOUS CONTROL WITH DEEP REINFORCEMENT LEARNING
  • 原文地址:https://blog.csdn.net/u014137683/article/details/133934731