共享内存:分段故障核心转储

时间:2014-12-15 03:59:53

标签: c linux memory shared-memory

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/shm.h>
int main()
{
    int shmid;
    char *viraddr;
    char buffer[BUFSIZ];
    shmid=shmget(1234,BUFSIZ,0666|IPC_CREAT);
    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);
}

我正在学习共享内存。我想实现两个进程之间的通信。当我运行此程序时,它始终指示此错误 - segmentation fault core dumped。对此有何帮助?感谢。

2 个答案:

答案 0 :(得分:1)

这里viraddr和buffer都有相同的大小。对于strcat(),建议dst大小至少比src大小大一个字节。 viraddr应该有足够的空间来保存缓冲区数据,以避免缓冲区溢出。

答案 1 :(得分:0)

也许,有时内存分配返回FFFFF然后抛出Segmentation Fault Core Dumped。原因是您没有足够的权限访问您的进程的内存。

只需使用 sudo 编译并运行代码即可。比如说你有这些文件

  

shm1.c
  shm2.c
  shm.h

然后你的命令需要按以下方式触发

sudo gcc shm1.c -o s1
sudo gcc shm2.c -o s2
sudo ./s1 &
sudo ./s2

如果您愿意在2个不同的终端上进行此操作,只需在终端1&amp;中触发sudo ./s1即可。不同终端2中的sudo ./s2