Return to BSD News archive
Path: euryale.cc.adfa.oz.au!newshost.anu.edu.au!harbinger.cc.monash.edu.au!simtel!lll-winken.llnl.gov!uwm.edu!uwvax!newssinet!botan!idzumi From: idzumi@shimane-u.ac.jp (Makoto Idzumi) Newsgroups: comp.unix.bsd.freebsd.misc Subject: Bug in shmget()??? Date: 21 Aug 1995 06:51:32 GMT Organization: Shimane University, Shimane, Japan Lines: 74 Message-ID: <419adk$k60@botan.shimane-u.ac.jp> NNTP-Posting-Host: lev.shimane-u.ac.jp X-Newsreader: mnews [version 1.18] 1994-05/16(Mon) Hello. I'm learning C programming on my FreeBSD 2.0R machine. When I run a simple program which uses shared memories, a strange behaviour of a system call "shmget()" was observed when a flag IPC_EXCL was set. Is it a bug in shmget()? Or simply my misunderstanding of it? The followings are a simple test program to check shmget( shmkey, sizeof( some_data ), IPC_CREAT | IPC_EXCL | 0666 ); and a log when it runs. Please look at them ...: === begin TEST PROGRAM ========= /****************************************************************/ /* shmtest -- to check how shmget(..IPC_CREAT | IPC_EXCL) works */ /* Usage: shmtest shmkey */ /****************************************************************/ #include <stdlib.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #include <stdio.h> int main( int argc, char **argv ) { key_t shmkey; /* shm KEY */ int shmid; /* shm ID */ char some_data[4096]; /* dummy */ if ( argc == 1 ) { (void) fprintf( stderr, "Usage: shmtest shmkey\n" ); exit( 1 ); } shmkey = atol( argv[1] ); (void) printf( "shmkey = %ld\n", shmkey ); shmid = shmget( shmkey, sizeof( some_data ), IPC_CREAT | IPC_EXCL | 0666 ); /* should be EOF if error...(BUT!!!) */ (void) printf( "shmid = %d\n", shmid ); return( 0 ); } === end TEST PROGRAM ========= === begin LOG ================== bash$ ipcs -m Shared Memory: T ID KEY MODE OWNER GROUP m 196608 1 --rw-rw-rw- idzumi wheel bash$ ./shmtest 1 shmkey = 1 shmid = 196608 /* <--- Why not EOF ????? */ bash$ ./shmtest 2 shmkey = 2 shmid = 65537 bash$ ipcs -m Shared Memory: T ID KEY MODE OWNER GROUP m 196608 1 --rw-rw-rw- idzumi wheel m 65537 2 --rw-rw-rw- idzumi wheel bash$ === end LOG ================== Additionally, two more questions: 1. Why no definition of IPC_ALLOC (=0100000) in sys/ipc.h ? 2. Why no man pages on shmget(), shmat(), msgget(), ... ? Thank you. ----------- Makoto Idzumi Dept.Math./Shimane Univ./Japan idzumi@botan.shimane-u.ac.jp