• 国庆作业 9月30 消息队列实现进程间通信


    1. 01_write.c:
    2. #include
    3. #define MAX 1024
    4. //x消息结构体
    5. typedef struct
    6. {
    7. long msgtype; //消息类型
    8. char msg[MAX]; //消息正文
    9. }Msg;
    10. #define SIZE sizeof(Msg)-sizeof(long) //正文大小
    11. int main(int argc, const char *argv[])
    12. {
    13. //1:创建一个key值
    14. key_t key;
    15. if((key = ftok("/",'k') )== -1)
    16. {
    17. perror("ftok error");
    18. return - 1;
    19. }
    20. //2:创建消息队列
    21. int msgid;
    22. if((msgid = msgget(key,IPC_CREAT|0664)) == -1)
    23. {
    24. perror("msgget error");
    25. return -1;
    26. }
    27. //3:向消息队列中发送数据
    28. Msg msg = {.msgtype = 100};
    29. while (1)
    30. {
    31. printf("请输入消息内容>>>>");
    32. fgets(msg.msg, sizeof(msg.msg), stdin);
    33. msg.msg[strlen(msg.msg) - 1] = '\0';
    34. //将消息发送到消息队列中
    35. if(msgsnd(msgid,&msg,SIZE,0) == -1)
    36. {
    37. perror("msgsnd error");
    38. return -1;
    39. }
    40. if(strcmp(msg.msg,"quit") == 0)
    41. {
    42. break;
    43. }
    44. //printf("%s\n", msg.msg);
    45. }
    46. return 0;
    47. }
    48. 02_read.c :
    49. #include
    50. #define MAX 1024
    51. //x消息结构体
    52. typedef struct
    53. {
    54. long msgtype; //消息类型
    55. char msg[MAX]; //消息正文
    56. }Msg;
    57. #define SIZE sizeof(Msg)-sizeof(long) //正文大小
    58. int main(int argc, const char *argv[])
    59. {
    60. //1:创建一个key值
    61. key_t key;
    62. if((key = ftok("/",'k') )== -1)
    63. {
    64. perror("ftok error");
    65. return - 1;
    66. }
    67. //2:创建消息队列
    68. int msgid;
    69. if((msgid = msgget(key,IPC_CREAT|0664)) == -1)
    70. {
    71. perror("msgget error");
    72. return -1;
    73. }
    74. //3:从消息队列中读取数据
    75. Msg msg;
    76. while (1)
    77. {
    78. if(msgrcv(msgid,&msg,SIZE,0,0) == -1)
    79. {
    80. perror("msgrcv error");
    81. return -1;
    82. }
    83. if(strcmp(msg.msg,"quit") == 0)
    84. {
    85. break;
    86. }
    87. //打印接收的数据
    88. printf("接收到数据为 :%s\n", msg.msg);
    89. }
    90. //4:删除消息队列
    91. msgctl(msgid,IPC_RMID,NULL);
    92. return 0;
    93. }

     

  • 相关阅读:
    Java反射的详细解析一
    将conda环境打包成docker步骤
    如何计算 R 中的 Phi 系数
    Perforce发布《2023游戏开发与设计现状报告》,为游戏开发行业提供参考
    BDP 581/591 azide,Bodipy581/591标记叠氮,2183473-20-1
    架构设计(高可用)
    物联网ARM开发-4协议-单总线应用温湿度传感器
    open62541交叉编译
    TailwindCss Functions & Directives
    Java EE初阶---多线程(基础)
  • 原文地址:https://blog.csdn.net/Huxiao1220/article/details/133443992