#include
#include
#include
#include
#include
int main()
{
int shmid;
char *shmptr;
if(shmid=shmget(IPC_PRIVATE,1000,0)<0)
{
printf("Here is the server:error,get share memeroy failed!\n");
exit(1);
}
if((shmptr=(void*)shmat(shmid,0,0))==(void*)-1)
{
printf("Here is the server:error,to make the shmat\n");
exit(1);
}
shmptr="Hello World";
if(system("./receiver")<0)
{
printf("Here is the server:System error");
}
sleep(320);
return 0;
}
运行这个程序的时候报错:
Here is the server:error,to make the shmat
不知道是什么原因,希望大侠指点一二。。。
释梵 于 2009-09-05 10:17:33发表:
在其他的地方发现了答案
if(shmid=shmget(IPC_PRIVATE,1000,0)<0)
这句话有优先级问题,应改为
if((shmid=shmget(IPC_PRIVATE,1000,0))<0)
麻烦大家了
释梵 于 2009-09-05 09:47:44发表:
我按照wang的说法把cast改成了(char *),但是还是原来的那个报错,至于0,0。我的书上写着
void *shmat(int shmid,void *addr,int flag);
如果addr为0,系统将自动查找进程地址空间,将共享内存区域附加到第一块有效区域上,此时flag无效。
所以我觉得这么写似乎没什么错。
我用gdb debug的时候发现shmid总是0,不知道跟这个有没有关系。
numdon 于 2009-09-05 00:03:04发表:
不懂
wang7131984 于 2009-09-04 23:34:55发表:
perror()来打印具体的错误信息,还有你这种写法很不标准,shmat的参数有自己定义的符号常量,不要写成0,0这种形式。还有你的cast也搞错了。shmat返回的就是void *,你再cast成void *有什么意义。要cast成char *