Документация по LinuxLinuxDoc.Ru 🔍

ipc - межпроцессные коммуникационные механизмы System V

НАЗВАНИЕ
ipc - межпроцессные коммуникационные механизмы System V

СИНТАКСИС

# include
# include
# include
# include
# include

ОПИСАНИЕ
На этой странице описываются межпроцессные
коммуникационные механизмы System V, реализованные в
Linux: очереди сообщений, наборы семафоров и сегменты
разделяемой памяти. Ниже слово ресурс означает рабочую
единицу одного из этих механизмов.

Права доступа к ресурсам
Для каждого ресурса система использует общую структуру
типа struct ipc_perm, чтобы хранить информацию,
необходимую для определения прав доступа при исполнении
ipc-операции. Структура ipc_perm, заданная в файле
системных заголовков , состоит из следующих
полей:

ushort cuid; /* идентификатор
пользователя-создателя */
ushort cgid; /* идентификатор группы-создателя */
ushort uid; /* идентификатор пользователя-владельца
*/
ushort gid; /* идентификатор группы-владельца */
ushort mode; /* права на чтение/запись */

Поле mode структуры ipc_perm определяет в своих младших
9-и битах права доступа процесса к ресурсу, вызывающему
системную функцию ipc. Права определяются следующим
образом:

0400 Чтение пользователем.
0200 Запись пользователем.
0040 Чтение группой.
0020 Запись группой.
0004 Чтение прочими.
0002 Запись прочими.

Биты 0100, 0010 и 0001 (права на исполнение) не
используются. Более того, "Запись" на самом деле означает
"Изменение" набора семафоров.

Тот же файл системных заголовков определяет и некоторые
символьные константы:

IPC_CREAT Создать ресурс, если такого ключа не
существует.

IPC_EXCL Вернуть ошибку, если ключ существует.

IPC_NOWAIT Вернуть ошибку, если запрос требует
ожидания.

IPC_PRIVATE Индивидуальный ключ.

IPC_RMID Удалить ресурс.

IPC_SET Установить опции ресурса.

IPC_STAT Получить опции ресурса.

Заметьте, что IPC_PRIVATE имеет тип key_t, а остальные
символьные константы являются флагами, которые можно
использовать в качестве операнда функции логического
сложения с переменной типа int.

Очереди сообщений
Очереди сообщений указываются с помощью положительного
числа, называемого (идентификатором очереди сообщений
msqid). У каждой очереди существует структура struct
msquid_ds, определенная в , состоящая из
следующих полей:

struct ipc_perm msg_perm;
ushort msg_qnum; /* количество сообщений в
очереди */
ushort msg_qbytes; /* максимальное количество
байтов в очереди */
ushort msg_lspid; /* идентификатор процесса,
последний раз вызвавшего функцию msgsnd */
ushort msg_lrpid; /* идентификатор процесса,
последний раз вызвавшего функцию msgrcv */
time_t msg_stime; /* время последнего вызова
msgsnd */
time_t msg_rtime; /* время последнего вызова
msgrcv */
time_t msg_ctime; /* последнее время изменения
состояния очереди */

msg_perm ipc_perm - это структура, определяющая права
доступа к очереди сообщений.

msg_qnum Количество сообщений, находящихся на текущий
момент в очереди.

msg_qbytes Максимальное количество байтов текста, которое
может находиться в очереди сообщений.

msg_lspid Идентификатор процесса, последний раз
вызвавшего системную функцию msgsnd.

msg_lrpid Идентификатор процесса, последний раз
вызвавшего системную функцию msgrcv.

msg_stime Время последнего вызова системной функции
msgsnd.

msg_rtime Время последнего вызова системной функции
msgrcv

msg_ctime Время последнего вызова системной функции,
изменившей поле структуры msqid_ds.

Наборы семафоров
Набор семафоров однозначно определяется положительным
числом, называемым (идентификатором набора семафоров
semid). У каждого набора семафоров имеется структура
данных struct semid_ds, определенная в и
состоящая из следующих полей:

struct ipc_perm sem_perm;
time_t sem_otime; /* время последней операции */
time_t sem_ctime; /* время последнего изменения */
ushort sem_nsems; /* количество семафоров в наборе
*/

sem_perm ipc_perm - это структура, определяющая права
доступа к набору семафоров.

sem_otime Время последнего вызова функции semop.

sem_ctime Время последнего вызова функции semctl,
изменившего одно из полей вышеописанной
структуры или состояние одного из семафоров
этого набора.

sem_nsems Количество семафоров в наборе. Каждый семафор
в наборе определяется неотрицательным числом
диапазона от 0 до sem_nsems-1.

Семафор - это структура типа struct sem, состоящая из
следующих полей:

ushort semval; /* значение семафора */
short sempid; /* идентификатор процесса, последний
раз работавшего с семафором */
ushort semncnt; /* количество процессов,
ожидающих увеличения значения семафора */
ushort semzcnt; /* количество процессов,
ожидающих обнуления значения семафора */

semval Значение семафора: неотрицательное целое.

sempid Идентификатор процесса, последний раз
выполнявшего операцию с этим семафором.

semncnt Количество процессов, ожидающих увеличения
значения semval.

semznt Количество процессов, ожидающих обнуления
значения semval .

Сегменты разделяемой памяти
Сегмент разделяемой памяти однозначно определяется
положительным числом, называемым (идентификатором сегмента
разделяемой памяти shmid). У каждого сегмента разделяемой
памяти имеется структура данных struct shmid_ds,
определенная в , состоящая из следующих полей:

struct ipc_perm shm_perm;
int shm_segsz; /* размер сегмента */
ushort shm_cpid; /* идентификатор
пользователя-создателя */
ushort shm_lpid; /* идентификатор процесса,
последний раз работавшего с сегментом */
short shm_nattch; /* количество текущих
подключений сегмента */
time_t shm_atime; /* время последнего подключения
сегмента */
time_t shm_dtime; /* время последнего отключения
сегмента */
time_t shm_ctime; /* время последнего изменения
структуры */

shm_perm ipc_perm - это структура, определяющая права
доступа к сегменту разделяемой памяти.

shm_segsz Размер сегмента разделяемой памяти в байтах.

shm_cpid Идентификатор процесса, создавшего сегмент
разделяемой памяти.

shm_lpid Идентификатор процесса, последний раз
вызывавшего функции shmat или shmdt.

shm_nattch Количество текущих подключений сегмента
разделяемой памяти.

shm_atime Время последнего вызова функции shmat.

shm_dtime Время последнего вызова функции shmdt.

shm_ctime Время последнего вызова функции shmctl,
изменившего одно из полей shmid_ds.
Читать новости Linux в Telegram
Linux - ipc - межпроцессные коммуникационные механизмы System V
Мы в соцсетях ✉