|
shmctl выполняет управляющие операции над разделяемым сегментом памяти.
Сегмент задается аргументом shmid - идентификатором сегмента.
Выполняемая операция задается аргументом cmd.
Аргумент buf служит представления информации о состоянии сегмента:
struct shmid_ds {
struct ipc_perm shm_perm; /* права доступа */
int shm_segsz; /* размер сегмента (байт) */
time_t shm_atime; /* время последнего присоединения */
time_t shm_dtime; /* время последнего отсоединения */
time_t shm_ctime; /* время последнего изменения */
unsigned short shm_cpid; /* pid создателя */
unsigned short shm_lpid; /* pid процесса, последнего оперировавшего с сегментом */
short shm_nattch; /* число текущих подключений */
/* следующая информация недоступна */
unsigned short shm_npages; /* размер (страниц) */
unsigned long *shm_pages;
struct shm_desc *attaches; /* дескрипторы подключений */
};
struct ipc_perm
{
key_t key;
ushort uid; /* euid и egid владельца */
ushort gid;
ushort cuid; /* euid и egid создателя */
ushort cgid;
ushort mode; /* младшие 9 бит доступа */
ushort seq; /* номер последовательности */
};
Операции, выполняемые системным вызовом shmctl, следующие:
IPC_STAT |
Копировать информацию из структуры сегмента в структуру, на которую указывает buf. |
IPC_SET |
Присвоить полям структуры ipc_perm соответствующие значения, находящиеся в структуре, на которую указывает buf.
| IPC_RMID |
Удалить сегмент. |
|