Sys V Message Queue Question
Charles Noren
noren at dinl.uucp
Thu Mar 16 01:31:44 AEST 1989
On one of our Sun systems (Sun 3/280 with SunOS 4.01) I've got
some C code working using System V Message Queues. Running
the program to any other of our networked machines (3/50, 3/260)
with SunOS 4.01) the code fails
on the msgget(2) call to create a non-existant message queue.
errno indicates an invalid argument, which was valid on the
Sun 3/280. Any ideas on what the problem is an how to fix
it? Is it a sysgen parameter that needs to be changed to allow
message queues?
Sample code:
/*
* Create message queue.
* Create by also checking the existence of the message queue.
* If the queue exists, the create attempt will fail.
*
* The flags of the first msgget perform the following:
*
* 00600 Set the permissions of the message queue
* for read/write by user only.
*
* IPC_CREAT Create a message queue (defined in
* <sys/ipc.h>).
*
* IPC_EXCL Perform the operations only if the message
* queue does not already exist (defined in
* <sys/ipc.h>).
*
*/
if((qid = msgget(key, 00600 | IPC_CREAT| IPC_EXCL)) == -1)
{
/*
* ...perform error processing.
*
*/
}
key is defined as key_t and I have used values from (key_t) 1 thru (key_t) 30.
The errno I get is 22 (EINVAL -- Invalid argument) when I was expecting
an errno of 17 (EEXIST -- File exists, which is what I get on the Sun
that this stuff works on if the queue already exists).
On the Suns that this does not work I cannot even create a "private"
queue (key = IPC_PRIVATE).
Any help will be appreciated.
--
Chuck Noren
NET: ncar!dinl!noren
US-MAIL: Martin Marietta I&CS, MS XL8058, P.O. Box 1260,
Denver, CO 80201-1260
Phone: (303) 971-7930
More information about the Comp.unix.questions
mailing list