#include <sys/msg.h> #include <sys/stat.h> int msgget(key_t key, int msgflg);
|
The msgget() function returns the message queue identifier associated with the parameter key.
Parameters
The value of msgflg is either 0 or is obtained by performing an OR operation on one or more of the following constants:
Authorities
Figure 1-5. Authorization Required for msgget()
| Object Referred to | Authority Required | errno |
|---|---|---|
| Message queue to be created | None | None |
| Existing message queue to be accessed | See Note | EACCES |
| Note: If the thread is accessing an existing message queue, the mode specified in the last 9 bits of msgflg must be a subset of the mode of the existing message queue. |
Return Value
Error Conditions
If msgget() is not successful, errno usually indicates one of the following errors. Under some conditions, errno could indicate an error other than those listed here.
An attempt was made to access an object in a way forbidden by its object access permissions.
The thread does not have access to the specified file, directory, component, or path.
If you are accessing a remote file through the Network File System, update operations to file permissions at the server are not reflected at the client until updates to data that is stored locally by the Network File System take place. (Several options on the Add Mounted File System (ADDMFS) command determine the time between refresh operations of local data.) Access to a remote file may also fail due to different mappings of user IDs (UID) or group IDs (GID) on the local and remote systems.
A message queue identifier exists for the parameter key, but operation permission as specified by the low-order 9 bits of msgflg would not be granted.
A referenced object is damaged. The object cannot be used.
The message queue has been damaged by a previous message queue operation.
The file specified already exists and the specified operation requires that it not exist.
The named file, directory, or path already exists.
A message queue identifier exists for the parameter key, but ((msgflg & IPC_CREAT) && (msgflg & IPC_EXCL)) is not zero. (& is a bitwise AND; && is a logical AND.)
The directory or a component of the path name specified does not exist.
A named file or directory does not exist or is an empty string.
A message queue identifier does not exist for the parameter key, and (msgflg & IPC_CREAT) is zero. (& is a bitwise AND.)
The requested operations required additional space on the device and there is no space left. This could also be caused by exceeding the user profile storage limit when creating or transferring ownership of an object.
Insufficient space remains to hold the intended file, directory, or link.
A message queue identifier is to be created, but the system-imposed limit on the maximum number of allowed message queue identifiers system-wide would be exceeded.
The operation failed because of an unknown system state. See any messages in the job log and correct any errors that are indicated, then retry the operation.
Error Messages
None.
Usage Notes
Related Information
Example
The following example creates a message queue:
#include <sys/msg.h>
#include <sys/stat.h>
main() {
int msgflg = 0;
int msqid;
msqid = msgget(IPC_PRIVATE, msgflg | IPC_CREAT | S_IRUSR | S_IWUSR);
}
|
Top
| Interprocess Communication APIs APIs by category |
| [Information Center Home Page | Feedback ] | [Legal | AS/400 Glossary] |