Операционные системы. Замятин А.В - 100 стр.

UptoLike

Составители: 

100
ветствовать началу сегмента в виртуальной памяти. Значением систем-
ного вызова является фактический виртуальный адрес начала сегмента.
Если значением daddr является NULL, ядро выбирает наиболее удобный
виртуальный адрес начала сегмента. Флаги системного вызова shmat
приведены ниже в таблице.
Таблица 4.3
Флаги системного вызова shmat
Флаг Описание
SHM_RDONLY
Ядро подключает участок памяти только для
чтения
SHM_RND
Определяет, если возможно, способ обработки
ненулевого значения daddr.
Для отключения сегмента от виртуальной памяти используется
системный вызов shmdt:
int shmdt (*daddr)
где daddr это виртуальный адрес начала сегмента в виртуальной памя-
ти, ранее полученный от системного вызова shmat.
Системный вызов shmctl
int shmctl (int shmid, int command, struct shmid_ds *shrn_stat)
по синтаксису и назначению аналогичен msgctl.
4.1.7. Примеры практической реализации
Семафоры
Программа semsyn, исходный код которой приведен ниже, создает
семафор и два процесса, синхронизирующихся с помощью созданного
семафора. В программе дочерний процесс является главным, он блоки-
рует и разблокирует семафор, родительский процесс ждет освобожде-
ния семафора.
#include <unistd.h>
#include <stdio.h>
#include <error.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/sem.h>
#include <sys/ipc.h>
#include <fcntl.h>