C语言 我想为学生成绩单数据创建一个共享内存,但它在 shmat 系统调用中返回错误条件



我想创建一个项目,其中要求使用共享内存来创建学生报告。要求用户创建学生人数报告并动态分配内存。 但是当我尝试附加它时,它会进入错误检查if语句,并且在打印错误消息后它会打印成功。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
typedef struct student
{
int id;
char name[20];
int maths;
int science;
int english;

}student;

int main()
{

student *ptr;
int n;
printf("enter the number of records you want to insert");
scanf("%d",&n);

ptr = (struct student*) malloc(n*sizeof(student));
int shmid;
key_t key = 9876;
shmid = shmget(key,(sizeof(ptr)*sizeof(student)), IPC_CREAT | 0666);
if(shmid < 0)
{
perror("shmget");
exit(1);
}
void* shm = shmat(shmid, NULL, 0);
if(shm = (void*) -1)
{
perror("Not attached");
exit(1);
}
return 0;

}

您需要考虑此行在做什么:

if(shm = (void*) -1)

正确的方法是:

if(shm == -1)

最新更新