我正在尝试在进程之间使用共享内存。我只是一步一步地实现这些功能。当我尝试写入内容时,我不断收到Segmentation fault(core dumped)。
int* ms; // Pointer for milliseconds
int* ns; // Pointer for nanoseconds
void checkArgs(int argc, char* argv[]);
void createSharedMem();
void createSharedMem()
{
int shmid = shmget(KEY, sizeof(int)*128, IPC_CREAT |0666 );
if(shmid < 0)
printf("\n Error creating shared memory");
ms = shmat(shmid, NULL,0);
ns = shmat(shmid,NULL,0);
*ms = 0;
*ns = 0;
}
int main(int argc, char* argv[])
{
checkArgs(argc,argv);
createSharedMem();
*ms = 1;
*ns = 1;
printf("ms : %d ns : %d", *ms,*ns);
}
我发现了这个问题。我没有使用#define KEY定义键并在shmget()中使用它,而是使用key_t创建一个键变量。这解决了“无效参数”的问题
这是更新的代码:
void createSharedMem()
{
key_t key;
int shmid = shmget(key, 4096, 0666 | IPC_CREAT);
if(shmid < 0)
perror("\n Error creating shared memory");
ms = shmat(shmid, NULL,0);
ns = shmat(shmid,NULL,0);
*ms =0
*ns=0;
printf("%d",*ms);
}