ftok <sys/types.h, sys/ipc.h>
key_t ftok(char *pathname, char proj);
Преобразует имя файла и идентификатор проекта в ключ для системных вызовов.
msgctl (SVr4, SVID) <sys/types.h, sys/ipc.h, sys/msg.h>
int msgctl(int msqid, int cmd, struct msqid_ds *buf);
Послать команду <cmd> сообщению <msqid> с параметрами <buf>;
msgget (SVr4, SVID) <sys/types.h, sys/ipc.h, sys/msg.h>
int msgget(key_t key, int msgflg);
Возвращает дескриптор очереди сообщений для ключа <key> с правами доступа <msgflg>.
msgsnd (SVr4, SVID) <sys/types.h, sys/ipc.h, sys/msg.h>
int msgsnd(int msqid, struct msgbuf *msgp, size_t msgsz, int msgflg);
Отправить сообщение <msgp> длиной <msgsz> и с флагами <msgflg>, по дескриптору сообщения <msqid>.
msgrcv (SVr4, SVID) <sys/types.h, sys/ipc.h, sys/msg.h>
ssize_t msgrcv(int msqid, struct msgbuf *msgp, size_t msgsz, long msgtyp, int msgflg);
Получить сообщение из дескриптора сообщения msqid, в буфер <msgp> размером <msgsz> с типом <msgtyp> и флагами <msgflg>. Если <msgtyp>=0 – читать первое сообщение из очереди, если < 0 – получить сообщение с минимальным типом не менее msgtyp.
semget (SVID) <sys/types.h, sys/ipc.h, sys/sem.h>
int semget(key_t key, int nsems, int semflg);
Возвращает идентификатор семафора в соответствии с ключом <key>, опциями <semflg> и количеством семафором <nsems> (Табл [*]).
semctl (SVID) <sys/types.h, sys/ipc.h, sys/sem.h>
int semctl(int semid, int semnum, int cmd, union semun arg);
Производит операции <cmd> (Табл [*]) по управлению семафорами.
semop (SVID) <sys/types.h, sys/ipc.h, sys/sem.h>
int semop(int semid, struct sembuf *sops, unsigned nsops);
Производит операции над выбранными элементами из набора семафоров <semid>. Каждый из элементов <nsops> в массиве <sops> определяет операцию, производимую над семафором в структуре <struct sembuf>.
shm_open (POSIX.1–2001) <sys/types.h, sys/mman.h, fcntl.h>
int shm_open(const char *name, int oflag, mode_t mode);
Создание/открытие разделяемого объекта памяти под именем <name>.
shm_unlink (POSIX.1–2001) <sys/types.h, sys/mman.h, fcntl.h>
int shm_unlink(const char *name);
Удаление /отключение разделяемого объекта памяти с именем <name>.
shmget (SVID) <sys/ipc.h, sys/shm.h>
int shmget(key_t key, int size, int shmflg);
Возвращает идентификатор разделяемой памяти в соответствии с ключом <key>, размером <size> и опциями <shmflg> (Табл.16).
shmat, shmdt (SVID) <sys/types.h, sys/shm.h>
void *shmat(int shmid, const void *shmaddr, int shmflg);
int shmdt(const void *shmaddr);
<shmat> – присоединяет сегмент разделяемой памяти <shmid> к сегменту данных вызывающего процесса. Адрес присоединяемого сегмента определяется функцией <shmaddr>.
<shmdt> – отстыковывает от сегмента данных вызывающего процесса сегмент разделяемой памяти, находящийся по адресу <shmaddr>.
shmctl (SVID) <sys/ipc.h, sys/shm.h>
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
Производит операции <cmd> (Табл.17) по управлению разделяемыми сегментами памяти.
Таблица 16. Флаги доступа к IPC
Флаг | Назначение |
IPC_CREAT | Создавать при отсутствии. |
IPC_EXCL | Ошибка, если существует и используется PC_CREAT. |
IPC_NOWAIT | Выход по ошибке отсутствия, без ожидания. |
MSG_NOERROR | Не выходить по ошибке в длине сообщения, а обрезать его. |
SHM_RN | Округление до ближайшей страницы. |
SHM_RDONLY | Открыть разделяемую область в режиме только для чтения. |
SEM_UNDO | Отменить действия при завершении процесса. |
Таблица 17. Операции над IPC
Операция | Описание |
GETALL | Получение значений всех семафоров множества. |
GETNCNT | Число процессов ожидающих ресурсов. |
GETPID | Возвращает PID процесса выполнившего вызов <semop>. |
GETVAL | Возвращает значение одного семафора из множества. |
GETZCNT | Число процессов ожидающих 100% освобождения ресурса. |
IPC_RMID | Удалить очередь из ядра. |
IPC_STAT | Сохранить структуру с ID в буфере. |
IPC_SET | Устанавливает ipc_perm структуры c ID. |
SETALL | Устанавливает значения семафоров множества, взятые из элемента <array> объединения. |
SETVAL | Устанавливает значение конкретного семафора как элемент <val> объединения. |