免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1343 | 回复: 5
打印 上一主题 下一主题

一个和消息队列的问题,不知道怎么回事 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-02-20 16:47 |只看该作者 |倒序浏览
按理说应该输出 str2:the string transported by  message
但是,结果输出 str2:the stri
不明白怎么回事,大家帮个忙看看,谢谢
os: sco5.0

#include <stdio.h>;
#include <unistd.h>;
#include <sys/types.h>;
#include <sys/ipc.h>;
#include <sys/msg.h>;

int main()
{
     char *str;
     int pid,msgid;
     char str2[80];
   
     str=(char *)malloc(255);
   
     msgid=msgget(IPC_PRIVATE,IPC_CREAT|0660);
     if(msgid<0)
    {
         printf("message initial false!!\n";
         return -1;
    }
   
     pid=fork();
     if(pid<0)
    {
         printf("fork error!!\n";
         return -1;
    }
   
       if(pid>;0)
      {
          memset(str,0,sizeof(str));
          sprintf(str,"the string transported by  message";
   
          msgsnd(msgid,str,sizeof(str),0);
   
      }
       if(pid==0)
     {
          memset(str2,0,sizeof(str2));
          msgrcv(msgid,str2,sizeof(str2),0,0);
          printf("str2:%s\n",str2);
      }
   
     return 0;
}

论坛徽章:
0
2 [报告]
发表于 2003-02-20 16:57 |只看该作者

一个和消息队列的问题,不知道怎么回事

大家帮个忙了

论坛徽章:
0
3 [报告]
发表于 2003-02-20 17:20 |只看该作者

一个和消息队列的问题,不知道怎么回事


  1. #include <stdio.h>;
  2. #include <unistd.h>;
  3. #include <sys/types.h>;
  4. #include <sys/ipc.h>;
  5. #include <sys/msg.h>;

  6. int main()
  7. {
  8. char *str;
  9. int pid,msgid;
  10. char str2[255];

  11. str=(char *)malloc(255);

  12. msgid=msgget(IPC_PRIVATE,IPC_CREAT|0660);
  13. if(msgid<0)
  14. {
  15. printf("message initial false!!\n");
  16. return -1;
  17. }

  18. pid=fork();
  19. if(pid<0)
  20. {
  21. printf("fork error!!\n");
  22. return -1;
  23. }

  24. if(pid>;0)
  25. {
  26. memset(str,0,255);
  27. sprintf(str,"the string transported by message");
  28. printf("str1:%s\n",str);
  29. msgsnd(msgid,str,255,0);

  30. }
  31. if(pid==0)
  32. {
  33. memset(str2,0,255);
  34. msgrcv(msgid,str2,255,0,0);
  35. printf("str2:%s\n",str2);
  36. }
  37. free(str);

  38. return 0;
  39. }
复制代码

论坛徽章:
0
4 [报告]
发表于 2003-02-20 17:39 |只看该作者

一个和消息队列的问题,不知道怎么回事

谢谢liupch老兄的帮忙
我已经找到问题了

看来在sco下面(其他系统可能也是这样):
初始化:
char *str_ptr;
char str_array[80];

str=(char *)malloc(255);

结果:
sizeof(str_array)=80
而 sizeof(str_ptr)=4

至于两个的strlen()则随具体内容变化而变化了

论坛徽章:
0
5 [报告]
发表于 2003-02-20 17:42 |只看该作者

一个和消息队列的问题,不知道怎么回事

没错呀,因为str_arry定义为数组,所以sizeof就是数组的长度
str_ptr定义成指针,sizeof其实是指针变量占内存的字节数

论坛徽章:
0
6 [报告]
发表于 2003-02-20 17:48 |只看该作者

一个和消息队列的问题,不知道怎么回事

sigh,基础的都忘了
//blush
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP