Skip to content
Advertisement

I wanted to create a shared memory for student report card data but it returns the error condition in the shmat syscall

I wanted to create a project where the requirement is to use shared memory to create a student report. Asks user for number of students report to be created and dynamically allocate the memory. But when I try to attach it, it gets into the error check if statement and after printing the error message it prints success.

    #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;

}

Advertisement

Answer

You need to think about what this line is doing:

 if(shm = (void*) -1)

The right way to do it is:

 if(shm == -1)
User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement