天嵌 ARM开发社区

 找回密码
 注册
查看: 1577|回复: 2

linux下的消息队列 通信

[复制链接]
回帖奖励 10 回复本帖可获得 1 奖励! 每人限 2 次(中奖概率 30%)
福大牛二爷 发表于 2013-1-4 15:34:01 | 显示全部楼层 |阅读模式
本帖最后由 福大牛二爷 于 2013-1-4 15:37 编辑

实现两个进程的同步,利用消息队列我想发送一个消息二者的程序解析信息来判断是否继续执行···,一下是我偶的代码,求高人看看吧,问题出在哪里,我想实现的是 间隔打印出0000 1111 0000 1111 0000 1111 .........
  1. #include <sys/types.h>
  2. #include <sys/msg.h>
  3. #include <unistd.h>
  4. #define key 0x000000FF
  5. struct msg_buf
  6. {
  7. int mtype;
  8. char data[255];
  9. };

  10. int main()
  11. {
  12. int msgid;
  13. int ret;
  14. struct msg_buf msgbuf;
  15. printf("key =[%x]\n",key);
  16. msgid=msgget(key,IPC_CREAT|0666);
  17. if(msgid==-1)
  18. {
  19. printf("create error\n");
  20. return -1;
  21. }

  22. msgbuf.mtype = 1;
  23. while(1){
  24.      while(1){
  25. memset(&msgbuf,0,sizeof(msgbuf));
  26. ret=msgrcv(msgid,&msgbuf,sizeof(msgbuf.data),1,IPC_NOWAIT);
  27. if(msgbuf.data[0]== '0'){
  28. printf("recv msg =[%s]\n",msgbuf.data);
  29. break;
  30. }
  31. sleep(1);
  32. }

  33. strcpy(msgbuf.data,"11111111");
  34. ret=msgsnd(msgid,&msgbuf,sizeof(msgbuf.data),IPC_NOWAIT);
  35. if(ret==-1)
  36. {
  37. printf("send message err\n");
  38. return -1;
  39. }
  40. }
  41. }
复制代码

这是第二个程序
  1. #include <sys/types.h>
  2. #include <sys/msg.h>
  3. #include <unistd.h>
  4. #define key 0x000000FF
  5. struct msg_buf
  6. {
  7. int mtype;
  8. char data[255];
  9. };

  10. int main()
  11. {
  12. int msgid;
  13. int ret;
  14. struct msg_buf msgbuf;
  15. printf("key =[%x]\n",key);
  16. msgid=msgget(key,IPC_CREAT|0666);
  17. if(msgid==-1)
  18. {
  19. printf("create error\n");
  20. return -1;
  21. }
  22. msgbuf.mtype = 1;

  23. while(1){

  24. strcpy(msgbuf.data,"0000");
  25. ret=msgsnd(msgid,&msgbuf,sizeof(msgbuf.data),IPC_NOWAIT);
  26. if(ret==-1)
  27. {
  28. printf("send message err\n");
  29. return -1;
  30. }
  31.    while(1){
  32. memset(&msgbuf,0,sizeof(msgbuf));
  33. ret=msgrcv(msgid,&msgbuf,sizeof(msgbuf.data),1,IPC_NOWAIT);
  34. if(msgbuf.data[0] == '1')
  35. {
  36. printf("recv msg =[%s]\n",msgbuf.data);
  37. break;
  38. }
  39. else
  40. {
  41. strcpy(msgbuf.data,"0000");
  42. ret=msgsnd(msgid,&msgbuf,sizeof(msgbuf.data),IPC_NOWAIT);
  43. }
  44. sleep(1);
  45. }
  46. }
  47. }
复制代码


 楼主| 福大牛二爷 发表于 2013-1-4 15:38:38 | 显示全部楼层
不知道问题出在哪里,大家帮忙看看,可以给点建议,最好要可行的啊,不要猜测啊!多谢了!
TQ-lkp 发表于 2013-1-4 17:56:47 | 显示全部楼层
sizeof()表示占用的内在大小,即为255,但你实际只有4个数据,实际长度请用strlen来判断
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-18 11:58 , Processed in 1.046875 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表