Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы по ОС.doc
Скачиваний:
50
Добавлен:
24.09.2019
Размер:
202.24 Кб
Скачать

18)Параметры функции semop.

Прототип функции semop имеет следующий вид:

#include<sys/types.h> #include<sys/ipc.h> #inciude<sys/sem.h> int semop (int semfd,struc sembuf* opPtr, int len);

С помощью этой функции можно изменять значение одного или нескольких семафоров в наборе (указанном аргументом semfd) и/или проверять равенство их значений нулю. Аргумент opPtr — это указатель на массив объектов типа struct sembuf, каждый из которых задает одну операцию (запрос или изменение значения). Аргумент len показывает, сколько элементов имеется в массиве, указанном аргументом opPtr.

Тип данных struct sembuf определяется в заголовке <sys/sem.h>: struct sembuf{

short sem_num;//индекссемафора short sem_op; // операция над семафором short sem_flg; //флаг(и) операции };

Переменная sem_op может иметь следующие значения.

Для работы с семафорами определены следующие функции: semget, semop и semctl.

Если вызов semop попытается уменьшить значение семафора до отрицательного числа или посчитает, что значение семафора равно нулю, когда на самом деле это не так, то ядро заблокирует вызывающий процесс. Этого не произойдет в том случае, если в полях sem_flg элементов массива, где semop меньше или равно нулю, указан флаг IPC NOWAIT.

В случае успешного выполнения этот вызов возвращает нуль, а в случае неудачи -1.

19)Параметры функции semctl.

Прототип функции semctl имеет следующий вид:

#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/sem.h>

int semctl(int semfd, int num, int cmd, union semun arg);

С помощью этой функции можно запрашивать и изменять управляющие параметры набора семафоров, указанного аргументом semfd, а также удалять семафор.

Значение semfd — это дескриптор набора семафоров, который берется из вызова функции semget.

Значение num — это индекс семафора, а следующий аргумент, cmd, задает операцию, которая должна быть выполнена над конкретным семафором данного набора.

Аргумент arg — это объект типа union, который может использоваться для задания или выборки управляющих параметров одного или нескольких семафоров набора в соответствии с аргументом cmd. Тип данных union semun определяется в заголовке <sys/sem.h>

union semun{

int val; //значение семафора

struct semid_ds *buf; //управляющие параметры набора

ushori *array{ // массив значении семафоров

IPC_STAT Копировать управляющие параметры набора в объект, указанный аргументом arg_buf. У вызывающего процесса должно быть право на чтение набора

IPC SET Заменить управляющие параметры набора семафоров данными, определенными в объекте, на который указывает аргумент arg.buf. Чтобы выполнить эту операцию, вызывающий процесс должен иметь права привилегированного пользователя, создателя или назначенного владельца набора. Этот вызов может устанавливать U1D владельца набора и идентификатор его группы, а также права доступа

IPC RMID Удалить семафор из системы. Чтобы выполнить эту операцию, вызывающий процесс должен иметь права привилегированного пользователя, создателя или назначенного владельца набора

GETALL Скопировать все значения семафоров в массив, на который указывает arg.array

SETALL Установить все значения семафоров равными значениям, содержащимся в массиве, на который указывает arg.anay

GETVAL Возвратить значение семафора с номером num. Аргумент arg не используется

SETVAL Установить значение семафора с номером num, равным значению, указанному в arg.val

GETPID Возвратить идентификатор процесса, который выполнял операции над семафором с номером num последним. Аргумент arg не используется.

GETNCNT Возвратить количество процессов, которые в текущий момент заблокированы и ожидают увеличения значения семафора с номером num. Аргумент arg не используется

GETZCNT Возвратить количество процессов, которые в текущий момент заблокированы и ожидают обращения значения семафора с номером num в нуль. Аргумент arg не используется.

В случае успешного выполнения этот вызов возвращает значение, соответствующее конкретному cmd, а в случае неудачи — -1.