diff options
Diffstat (limited to 'man5/ipc.5')
-rw-r--r-- | man5/ipc.5 | 383 |
1 files changed, 383 insertions, 0 deletions
diff --git a/man5/ipc.5 b/man5/ipc.5 new file mode 100644 index 000000000..b7c1051cd --- /dev/null +++ b/man5/ipc.5 @@ -0,0 +1,383 @@ +.\" Copyright 1993 Giorgio Ciucci (giorgio@crcc.it) +.\" +.\" Permission is granted to make and distribute verbatim copies of this +.\" manual provided the copyright notice and this permission notice are +.\" preserved on all copies. +.\" +.\" Permission is granted to copy and distribute modified versions of this +.\" manual under the conditions for verbatim copying, provided that the +.\" entire resulting derived work is distributed under the terms of a +.\" permission notice identical to this one. +.\" +.\" Since the Linux kernel and libraries are constantly changing, this +.\" manual page may be incorrect or out-of-date. The author(s) assume no +.\" responsibility for errors or omissions, or for damages resulting from +.\" the use of the information contained herein. The author(s) may not +.\" have taken the same level of care in the production of this manual, +.\" which is licensed free of charge, as they might when working +.\" professionally. +.\" +.\" Formatted or processed versions of this manual, if unaccompanied by +.\" the source, must acknowledge the copyright and authors of this work. +.\" +.TH IPC 5 1993-11-01 "Linux 0.99.13" "Linux Programmer's Manual" +.SH NAME +ipc \- System V interprocess communication mechanisms +.SH SYNOPSIS +.nf +.B +# include <sys/types.h> +.B +# include <sys/ipc.h> +.B +# include <sys/msg.h> +.B +# include <sys/sem.h> +.B +# include <sys/shm.h> +.SH DESCRIPTION +This manual page refers to the Linux implementation of the System V +interprocess communication mechanisms: +message queues, semaphore sets, and shared memory segments. +In the following, the word +.B resource +means an instantiation of one among such mechanisms. +.SS Resource Access Permissions +For each resource, the system uses a common structure of type +.BR "struct ipc_perm" +to store information needed in determining permissions to perform an +ipc operation. +The +.B ipc_perm +structure, defined by the +.I <sys/ipc.h> +system header file, includes the following members: +.sp +.B + ushort cuid; +/* creator user id */ +.br +.B + ushort cgid; +/* creator group id */ +.br +.B + ushort uid; +/* owner user id */ +.br +.B + ushort gid; +/* owner group id */ +.br +.B + ushort mode; +/* r/w permissions */ +.PP +The +.B mode +member of the +.B ipc_perm +structure defines, with its lower 9 bits, the access permissions to the +resource for a process executing an ipc system call. +The permissions are interpreted as follows: +.sp +.nf + 0400 Read by user. + 0200 Write by user. +.sp .5 + 0040 Read by group. + 0020 Write by group. +.sp .5 + 0004 Read by others. + 0002 Write by others. +.fi +.PP +Bits 0100, 0010, and 0001 (the execute bits) are unused by the system. +Furthermore, +"write" +effectively means +"alter" +for a semaphore set. +.PP +The same system header file also defines the following symbolic +constants: +.TP 14 +.B IPC_CREAT +Create entry if key doesn't exist. +.TP +.B IPC_EXCL +Fail if key exists. +.TP +.B IPC_NOWAIT +Error if request must wait. +.TP +.B IPC_PRIVATE +Private key. +.TP +.B IPC_RMID +Remove resource. +.TP +.B IPC_SET +Set resource options. +.TP +.B IPC_STAT +Get resource options. +.PP +Note that +.B IPC_PRIVATE +is a +.B key_t +type, while all the other symbolic constants are flag fields and can +be OR'ed into an +.B int +type variable. +.SS Message Queues +A message queue is uniquely identified by a positive integer +.RI "(its " msqid ) +and has an associated data structure of type +.BR "struct msqid_ds" , +defined in +.IR <sys/msg.h> , +containing the following members: +.sp +.B + struct ipc_perm msg_perm; +.br +.B + ushort msg_qnum; +/* no of messages on queue */ +.br +.B + ushort msg_qbytes; +/* bytes max on a queue */ +.br +.B + ushort msg_lspid; +/* pid of last msgsnd call */ +.br +.B + ushort msg_lrpid; +/* pid of last msgrcv call */ +.br +.B + time_t msg_stime; +/* last msgsnd time */ +.br +.B + time_t msg_rtime; +/* last msgrcv time */ +.br +.B + time_t msg_ctime; +/* last change time */ +.TP 11 +.B msg_perm +.B ipc_perm +structure that specifies the access permissions on the message +queue. +.TP +.B msg_qnum +Number of messages currently on the message queue. +.TP +.B msg_qbytes +Maximum number of bytes of message text allowed on the message +queue. +.TP +.B msg_lspid +ID of the process that performed the last +.B msgsnd +system call. +.TP +.B msg_lrpid +ID of the process that performed the last +.B msgrcv +system call. +.TP +.B msg_stime +Time of the last +.B msgsnd +system call. +.TP +.B msg_rtime +Time of the last +.B msgcv +system call. +.TP +.B msg_ctime +Time of the last +system call that changed a member of the +.B msqid_ds +structure. +.SS Semaphore Sets +A semaphore set is uniquely identified by a positive integer +.RI "(its " semid ) +and has an associated data structure of type +.BR "struct semid_ds" , +defined in +.IR <sys/sem.h> , +containing the following members: +.sp +.B + struct ipc_perm sem_perm; +.br +.B + time_t sem_otime; +/* last operation time */ +.br +.B + time_t sem_ctime; +/* last change time */ +.br +.B + ushort sem_nsems; +/* count of sems in set */ +.TP 11 +.B sem_perm +.B ipc_perm +structure that specifies the access permissions on the semaphore +set. +.TP +.B sem_otime +Time of last +.B semop +system call. +.TP +.B sem_ctime +Time of last +.B semctl +system call that changed a member of the above structure or of one +semaphore belonging to the set. +.TP +.B sem_nsems +Number of semaphores in the set. +Each semaphore of the set is referenced by a non-negative integer +ranging from +.B 0 +to +.BR sem_nsems\-1 . +.PP +A semaphore is a data structure of type +.B "struct sem" +containing the following members: +.sp +.B + ushort semval; +/* semaphore value */ +.br +.B + short sempid; +/* pid for last operation */ +.br +.B + ushort semncnt; +/* nr awaiting semval to increase */ +.br +.B + ushort semzcnt; +/* nr awaiting semval = 0 */ +.TP 11 +.B semval +Semaphore value: a non-negative integer. +.TP +.B sempid +ID of the last process that performed a semaphore operation +on this semaphore. +.TP +.B semncnt +Number of processes suspended awaiting for +.B semval +to increase. +.TP +.B semznt +Number of processes suspended awaiting for +.B semval +to become zero. +.SS Shared Memory Segments +A shared memory segment is uniquely identified by a positive integer +.RI "(its " shmid ) +and has an associated data structure of type +.BR "struct shmid_ds" , +defined in +.IR <sys/shm.h> , +containing the following members: +.sp +.B + struct ipc_perm shm_perm; +.br +.B + int shm_segsz; +/* size of segment */ +.br +.B + ushort shm_cpid; +/* pid of creator */ +.br +.B + ushort shm_lpid; +/* pid, last operation */ +.br +.B + short shm_nattch; +/* no. of current attaches */ +.br +.B + time_t shm_atime; +/* time of last attach */ +.br +.B + time_t shm_dtime; +/* time of last detach */ +.br +.B + time_t shm_ctime; +/* time of last change */ +.TP 11 +.B shm_perm +.B ipc_perm +structure that specifies the access permissions on the shared memory +segment. +.TP +.B shm_segsz +Size in bytes of the shared memory segment. +.TP +.B shm_cpid +ID of the process that created the shared memory segment. +.TP +.B shm_lpid +ID of the last process that executed a +.B shmat +or +.B shmdt +system call. +.TP +.B shm_nattch +Number of current alive attaches for this shared memory segment. +.TP +.B shm_atime +Time of the last +.B shmat +system call. +.TP +.B shm_dtime +Time of the last +.B shmdt +system call. +.TP +.B shm_ctime +Time of the last +.B shmctl +system call that changed +.BR shmid_ds . +.SH "SEE ALSO" +.BR msgctl (2), +.BR msgget (2), +.BR msgrcv (2), +.BR msgsnd (2), +.BR semctl (2), +.BR semget (2), +.BR semop (2), +.BR shmat (2), +.BR shmctl (2), +.BR shmdt (2), +.BR shmget (2), +.BR ftok (3) |