OpenSCADAWiki:
Roman Savochenko
/
C Short All
/
part2
/part20
...
Home
|
Index
|
Changes
|
Comments
|
Users
|
Registration
|
Login
:
Password:
====2.20 IPC (Inter Process Communication)==== **ftok <sys/types.h, sys/ipc.h>** //key_t ftok(char *pathname, char proj);// Преобразует имя файла и идентификатор проекта в ключ для системных вызовов. =====2.20.1 Сообщения===== **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. =====2.20.2 Семафоры===== **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>. =====2.20.3 Разделяемая память===== **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> объединения.|| |#
Please type the word you read in the image: