Solved

shmget returning 0

Posted on 2008-10-26
1
1,000 Views
Last Modified: 2008-10-28
I have written this code

The call to CreateSharedMem creates and returns the id of shared memory segment but when i call GetSharedMem it returns 0?

Any idea what i am doing wrong ?

Thank You
int CreateSharedMem(char* key_file, char id, int seg_size)
{
        int shm_id;
        key_t keyval;
        if ((keyval = ftok(key_file,id))==-1)
        {
        	perror("ftok");
        	return -1;
        } 
        // Can use IPC_EXCL which will fail and returns -1 if a segment with the same key exists
        if((shm_id = shmget( keyval, seg_size, IPC_CREAT | 0666 | IPC_EXCL )) == -1)
        {
        		perror("shmget");
                return(-1);
        }
   
        return(shm_id);
}
 
int GetSharedMem(char* key_file,char id, int seg_size)
{
        int shm_id;
        key_t key_val;
        if ((key_val = ftok(key_file,id))==-1)
        {
        	perror("ftok");
        	return -1;
        } 
        printf("Key is %d",key_val);
        // Can use IPC_EXCL which will fail and returns -1 if a segment with the same key exists
        if((shm_id = shmget( key_val , seg_size, IPC_CREAT | 0666 ) == -1))
        {
        		perror("shmget");
                return(-1);
        }
        return(shm_id);
	
}
 
main()
{
.
.
 
 /* Create a shared memory */
	int my_shm_id = CreateSharedMem("MySharedMem.c",'A',1000);
	printf("%d : Shared mem is created\n",my_shm_id);
	
	
/* Get the same shared memory */
       int my_shm_id = GetSharedMem("MySharedMem.c",'A',1000);	
       printf("%d is Shared mem that is created\n",my_shm_id);
.
.
}

Open in new window

0
Comment
Question by:Novice_
1 Comment
 
LVL 53

Accepted Solution

by:
Infinity08 earned 125 total points
ID: 22810811
Due to operator precedence, this :

        if ((shm_id = shmget( key_val , seg_size, IPC_CREAT | 0666 ) == -1))

is the same as this :

        if ((   shm_id = (shmget( key_val , seg_size, IPC_CREAT | 0666 ) == -1)   ))

So, you check whether the return value of shmget is == -1, and then you place the result of that comparison in shm_id (0 if false, non-zero if true).

shm_id being 0 means that the shmget call succeeded.


I would suspect that you intended this instead :

        if ((shm_id = shmget( key_val , seg_size, IPC_CREAT | 0666 )) == -1)
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Compiling syslinux 6.0.3 from source on Centos 7 3 290
Problem to save 10 174
python - find anything after $ question. 9 44
Can someone explain the following statement in C? 4 31
Summary: This tutorial covers some basics of pointer, pointer arithmetic and function pointer. What is a pointer: A pointer is a variable which holds an address. This address might be address of another variable/address of devices/address of fu…
This is a short and sweet, but (hopefully) to the point article. There seems to be some fundamental misunderstanding about the function prototype for the "main" function in C and C++, more specifically what type this function should return. I see so…
The goal of this video is to provide viewers with basic examples to understand and use structures in the C programming language.
The goal of this video is to provide viewers with basic examples to understand opening and writing to files in the C programming language.

679 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question