Архитектура операционной системы UNIX


         

ПРИЛОЖЕНИЕ. СИСТЕМНЫЕ ОПЕРАЦИИ - часть 12


Функция shmctl выполняет различные операции над областью разделяемой памяти, ассоциированной с идентификатором id. Структура shmid_ds определена следующим образом: struct shmid_ds { struct ipc_perm shm_perm; /* структура, описываю- щая права доступа */ int shm_segsz; /* размер сегмента */ int * pad1; /* используется систе- мой */ ushort shm_lpid; /* идентификатор про- цесса, связанного с последней операцией над областью */ ushort shm_cpid; /* идентификатор про- цесса-создателя */ ushort shm_nattch; /* количество присоеди- нений к процессам */ short pad2; /* используется систе- мой */ time_t shm_atime; /* время последнего присоединения */ time_t shm_dtime; /* время последнего отсоединения */ time_t shm_ctime; /* время последнего внесения измене- ний */ };

Операции:

IPC_STAT прочитать в буфер buf содержимое заголовка области, ассоциированной с идентификатором id

IPC_SET установить значения переменных shm_perm.uid, shm_perm.gid и shm_perm.mode (9 младших разрядов структуры) в заголовке области в соответствии с содержимым буфера buf

IPC_RMID удалить из системы область разделяемой памяти, ассоциированной с идентификатором id

shmget #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> shmget(key,size,flag) key_t key; int size,flag;

Функция shmget обращается к области разделяемой памяти или создает ее. Параметр size задает размер области в байтах. Параметры key и flag имеют тот же смысл, что и в функции msgget.

shmор #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> shmat(id,addr,flag) int id,flag; char *addr; shmdt(addr) char *addr;

Функция shmat присоединяет область разделяемой памяти, ассоциированную с идентификатором id, к адресному пространству процесса. Если параметр addr имеет нулевое значение, ядро само выбирает для присоединения области подходящий адрес. В противном случае оно пытается присоединить область, используя в качестве значение параметра addr в качестве адреса. Если в параметре flag установлен бит SHM_RND, ядро в случае необходимости округляет адрес. Функция shmat возвращает адрес, по которому область присоединяется фактически.Функция shmdt отсоединяет область разделяемой памяти, присоединенную ранее по адресу addr.




Содержание  Назад  Вперед