[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
Управление разделяемой памятью
Системный вызов shmctl(2) имеет следующие параметры
shmid - это идентификатор разделяемого сегмента, полученный от
успешного вызова shmget(2).
Команда cmd может принимать одно из следующих значений:
IPC_STAT Копирует информацию о состоянии разделяемого сегмента в
структуру, на которую указывает buf.
IPC_SET Устанавливает хозяина, группу и права чтения/записи для
хозяина, группы и других пользователей. Значения должны
находиться в структуре, на которую указывает buf. Эту
операцию могут выполнять только хозяин, создатель и
суперпользоватедь.
IPC_RMID Удаляет идентификатор разделяемого сегмента и разрушает
сегмент и ассоциированную с ним структуру данных
(дескриптор). Только хозяин, создатель и
суперпользователь могут удалить разделяемый сегмент.
Эта команда не делает немедленного освобождения
ресурсов, она скорее запрещает дальнейшие shmget(2) и
shmat(2). Когда все присоединившиеся процессы закончат
работу с сегментом (shm_nattch станет равным 0),
сегмент будет удален. Если удаления не сделать,
разделяемый сегмент будет существовать до перезагрузки
системы, даже если к нему никто не присоединен.
SHM_LOCK Закрепляет разделяемый сегмент в памяти. Эта команда
может быть выполнена только процессом с эффективным ID
пользователя равным суперпользователю.
SHM_UNLOCK Открепляет разделяемый сегмент. Эта команда может быть
выполнена только процессом с эффективным ID
пользователя, равным суперпользователю.
Дескриптор разделяемого сегмента имеет следующую структуру:
struct shmid_ds {
struct ipc_perm shm_perm; /* operation permission struct */
int shm_segsz; /* size of segment in bytes */
struct anon_map *shm_amp; /* segment anon_map pointer */
ushort shm_lkcnt; /* number of times it is being locked */
char pad[2];
pid_t shm_lpid; /* pid of last shmop */
pid_t shm_cpid; /* pid of creator */
ulong shm_nattch; /* used only for shminfo */
ulong shm_cnattch; /* used only for shminfo */
time_t shm_atime; /* last shmat time */
long shm_atimfrac; /* reserved for time_t expansion */
time_t shm_dtime; /* last shmdt time */
long shm_dtimfrac; /* reserved for time_t expansion */
time_t shm_ctime; /* last change time */
long shm_ctimfrac; /* reserved for time_t expansion */
long pad1[4]; /* reserve area */
};
УПРАВЛЕНИЕ РАЗДЕЛЯЕМОЙ ПАМЯТЬЮ
shmctl(2)
ИМЯ
shmctl - операции по управлению разделяемой памятью
ИСПОЛЬЗОВАНИЕ
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
int shmctl (int shmid, int cmd, struct shmid_ds *buf)
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
успех - 0
неуспех - -1 и errno установлена