gpt4 book ai didi

c - 无法运行共享内存程序

转载 作者:太空宇宙 更新时间:2023-11-04 11:07:37 26 4
gpt4 key购买 nike

我编写了以下程序作为共享内存示例。我想从 write.c 文件中创建的共享内存中写入一些消息,并希望在同一内存中的 read.c 进程中显示它。但是当我尝试运行这些程序时,我收到错误消息:

Segmentation fault (core dumped)

已尝试但无法在我的代码中找到错误。

写.c文件:

#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>

main() {
key_t key=1235;
int shm_id;
void *shm;
char *message = "hello";
shm_id = shmget(key,10*sizeof(char),IPC_CREAT);
shm = shmat(shm_id,NULL,NULL);
sprintf(shm,"%s",message);
}

读取.c文件:

#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>

main() {
key_t key=1235;
int shm_id;
void *shm;
char *message;
message = malloc(10*sizeof(char));
shm_id = shmget(key,10*sizeof(char),NULL);
shm = shmat(shm_id,NULL,NULL);
if(shm == NULL)
{
printf("error");
}
sscanf(shm,"%s",message);
printf("\n message = %s\n",message);
}

最佳答案

问题不在于 sprintf。这是一个权限问题,您没有权限附加刚刚创建的段。当我以普通用户身份运行您的“write”程序时,shmat 失败并返回 -1,然后 sprintf 当然会崩溃。 shmat 还将 errno 设置为 13(“权限被拒绝”)。当我以 root 身份运行它时,它可以正常工作。

试试这个(并使用新 key ):

shm_id = shmget(key, 10*sizeof(char), IPC_CREAT | 0777);

flags 0777 是对段的权限,类似于对文件的权限。

关于c - 无法运行共享内存程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24606500/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com