QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1470|回复: 3

关于共享存储区通信的问题

[复制链接]
发表于 2006-2-24 12:55:36 | 显示全部楼层 |阅读模式
一段在网上看到的程序,上机测试发现与预期结果不符。
运行后没有任何结果显示程序就结束了。
我看了看程序结构觉得没有什么问题,就是利用共享存储区进行同步的程序。
请各位指点一下
#include <sys/types.h>
#include <sys/shm.h>
#include <sys/ipc.h>
#define SHMKEY 75
int shmid,i; int *addr;

void client( )
{ int i;
   shmid=shmget(SHMKEY,1024,0777); /*打开共享存储区*/
   addr=shmat(shmid,0,0); /*获得共享存储区首地址*/
   for (i=9;i>=0;i--)
   { while (*addr!=-1);
      printf("(client) sent\n");
      *addr=i;
   }
   exit(0);
}

void server( )
{
   shmid=shmget(SHMKEY,1024,0777|IPC_CREAT); /*创建共享存储区*/
   addr=shmat(shmid,0,0); /*获取首地址*/
   do
   {
     *addr=-1;
     while (*addr==-1);
     printf("(server) received\n");
   }while (*addr);
   shmctl(shmid,IPC_RMID,0); /*撤消共享存储区,归还资源*/
   exit(0);
}

main( )
{
   while ((i=fork( ))= =-1);
   if (!i) server( );
   system(“ipcs -m”);
   while ((i=fork( ))= =-1);
   if (!i) client( );
   wait(0);
   wait(0);
}
发表于 2006-2-24 17:35:31 | 显示全部楼层
运行正常,但是最好对shmget的返回值进行判断,有可能获取失败。
回复

使用道具 举报

 楼主| 发表于 2006-2-24 20:58:42 | 显示全部楼层
我的系统环境是FC3 我运行之后什么结果也没有显示 marship前辈是在什么环境下运行的? 不知有没有关系
回复

使用道具 举报

发表于 2006-2-25 14:02:33 | 显示全部楼层
前辈不敢当,我是在suse9.2,我看了这个程序,如果各个部分都成功的话,肯定可以正常运行。
你自己对各个关键地方的返回值判断一下,跟踪一下程序,很简单的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-2 22:27 , Processed in 0.043779 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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