在64位机下使用shmat函数出现的问题

fmz 发布于 2013/04/23 21:32
阅读 958
收藏 0

共享内存通信,发送进程:

#include <stdio.h>

#include <stdlib.h> 
#include <string.h> 
#include <unistd.h> 
#include <sys/types.h> 
#include <linux/shm.h> 


main() 
{ 
    int shmid; 
    char buffer[BUFSIZ]; 


    shmid = shmget(1234,BUFSIZ,0666|IPC_CREAT|IPC_64); 
    char *viraddr = (char*)shmat(shmid,0,0); 


    while(1) 
    { 
        puts("Enter some text:"); 
        fgets(buffer,BUFSIZ,stdin); 
        strcat(viraddr,buffer); 
        if(strncmp(buffer,"end",3)==0) 
            break; 
    } 
    shmdt(viraddr); 
    exit(0); 
}

zp@zpeng :21:26 one$ gcc -c shmsnd.c
shmsnd.c: In function ‘main’:
shmsnd.c:14:21: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
如果忽略waring,直接运行

zp@zpeng :21:26 one$ ./a.out 
Enter some text:
asdfa
Segmentation fault

求高手解释啊!!!

加载中
0
0-1
0-1
<linux/shm.h>改为<sys/shm.h>, IPC_64去掉就可以了。 具体原因,我也还没想明白。。。
fmz
fmz
去掉IPC_64后在32位系统下程序可正常运行,在64位机下就出现这种问题,<linux/shm.h>换成<sys/shm.h>后解决了问题。
返回顶部
顶部