红联Linux门户
Linux帮助

帮帮忙看看程序哪错了(内存共享)

发布时间:2009-05-28 22:04:40来源:红联作者:zero1665
/*memory1.c*/

#include
#include
#include
#include

#define SHMKEY 75
int shmid;

int main()
{
int *pint=0,m,n,result;
char *addr1=0,operator;
int judge;


// printf("m=%d,operator=%c,n=%d\n",m,operator,n);//调试用

shmid=shmget(SHMKEY,1024,0777|IPC_CREAT);
if(-1==shmid)
{
printf("creat shm error");
return -1;
}
addr1=(char*)shmat(shmid,0,0);
if(-1==(int)addr1)
{
printf("attach shm error!\n");
return -1;
}
printf("addr1 0x%x\n",addr1);
while(1)
{ /*式子的输入*/
printf("请输入要进行运算的式子:(如12+45)\n");//各位大哥请注意,中间是没有空格的
scanf("%d%c%d",&m,&operator,&n);
pint=(int *)addr1;
*pint=0;
pint++;
*pint=m;
pint++;
*pint=(int)operator;
pint++;
*pint=n;
pint++;
pint=(int *)addr1;
*pint=256;
while(*pint!=255);
pint++;
result=*pint;
pint--;
*pint=0;
printf("reslt=%d\n",result);
printf("また?けるか。(0继续/1结束)\n");
scanf("%d",&judge);
if(judge==1)
{
break;
}
}
return 0;
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/*memory2.c*/

#include
#include
#include
#include

int shmid;

int main()
{
int *pint,result,m,n;
char *addr2;
char operator;

shmid=shmget(75,1024,0777|IPC_CREAT);
if(-1==shmid)
{
printf("creat shm error");
return -1;
}
addr2=shmat(shmid,0,0);
if(-1==(int)addr2)
{
printf("attach shm error!\n");
return -1;
}

pint=(int *)addr2;
while(0==*pint);
pint++;
m=*pint;
pint++;
operator=*pint;
pint++;
n=*pint;
switch(operator)
{
case '+':result=m+n;break;
case '-':result=m-n;break;
case '*':result=m*n;break;
case '/':result=m/n;break;
}
pint=(int *)addr2;
*pint=255;
pint++;
*pint=result;
return 0;

}
~~~~~~~~~~~~~~~~~~

执行:

#gcc -o memory1 memory1.c

#gcc -o memory2 memory22.c

#./memory1 //窗口1

#./memory2 //窗口2

窗口1结果出现 //一次结束按提示选择是否继续

# ./memory2 //继续测试

要实现的功能:文件memory1向共享的内存段中写一个运算式子,,然后文件memory2,算出结果再次写入内存,,然后memory1从内存读出结果并输出
问题:四位以下的结果都正确,但对五位及五位以上的结果就有时对有时错。。不知道为什么。还请各位牛人帮忙找找问题在哪里啊。。。
文章评论

共有 4 条评论

  1. wangfeng819 于 2009-06-06 18:52:06发表:

    好久没编程了,一下子也难看出,你编译一下,系统会提示你语法错误的

  2. GrayJacket 于 2009-05-29 08:36:09发表:

    应该是溢出的问题!

  3. deepwhite 于 2009-05-29 08:29:12发表:

    考虑是不是你的数值超出了int的范围,把int 换成long long试试。
    没真正跑这个程序,只是猜测。

  4. seais 于 2009-05-28 22:50:16发表:

    留给高手了,菜鸟闪过