当前位置: 技术问答>linux和unix
求助:我这个内存共享的小程序,编译没错,运行有错,请各位大哥帮呆板能够我,谢谢!
来源: 互联网 发布时间:2015-12-04
本文导语: #include #include #include #include #define BUF_SIZE 1024 #define MYKEY 24 int main(void) { int shmid; char *shmptr; if(shmid=shmget(MYKEY, BUF_SIZE, IPC_CREAT)==-1) //开辟 { printf("shmget error! n");...
#include
#include
#include
#include
#define BUF_SIZE 1024
#define MYKEY 24
int main(void)
{
int shmid;
char *shmptr;
if(shmid=shmget(MYKEY, BUF_SIZE, IPC_CREAT)==-1) //开辟
{
printf("shmget error! n");
exit(1);
}
if((shmptr=shmat(shmid,0,0))==( void*)-1) //附加
{
fprintf(stderr,"shmat error!n");
exit(1);
}
while(1)
{
printf("string: %s n", shmptr);
sleep(3000);
}
exit(0);
}
[root@localhost linuxc]# gcc -o a24 a24.c
[root@localhost linuxc]# ./a24
shmat error!
各位大哥,这是什么原因啊?
谢谢!
#include
#include
#include
#define BUF_SIZE 1024
#define MYKEY 24
int main(void)
{
int shmid;
char *shmptr;
if(shmid=shmget(MYKEY, BUF_SIZE, IPC_CREAT)==-1) //开辟
{
printf("shmget error! n");
exit(1);
}
if((shmptr=shmat(shmid,0,0))==( void*)-1) //附加
{
fprintf(stderr,"shmat error!n");
exit(1);
}
while(1)
{
printf("string: %s n", shmptr);
sleep(3000);
}
exit(0);
}
[root@localhost linuxc]# gcc -o a24 a24.c
[root@localhost linuxc]# ./a24
shmat error!
各位大哥,这是什么原因啊?
谢谢!
|
出错原因:==的优先级高于=,所以
if(shmid=shmget(MYKEY, BUF_SIZE, IPC_CREAT)==-1)
这句shmid会被赋值为0,因此shmat会抱错!
该位这样:
if((shmid=shmget(MYKEY, BUF_SIZE, IPC_CREAT))==-1)
另外shmget的第一个参数你这样赋值的方法不妥,
应该为IPC_PRIVATE或者是ftok()获得的一个key.
if(shmid=shmget(MYKEY, BUF_SIZE, IPC_CREAT)==-1)
这句shmid会被赋值为0,因此shmat会抱错!
该位这样:
if((shmid=shmget(MYKEY, BUF_SIZE, IPC_CREAT))==-1)
另外shmget的第一个参数你这样赋值的方法不妥,
应该为IPC_PRIVATE或者是ftok()获得的一个key.