ВУЗ:
Составители:
69
аргумента buf в объединении semun;
IPC_SET Устанавливает значение элемента ipc_perm структуры semid_ds для
множества;
IPC_RMID Удаляет множество из ядра;
GETALL Используется для получения значений всех семафоров множества.
Целые значения запоминаются в массиве элементов unsigned short, на
который указывает член объединения array;
GETNCNT Выдает число процессов, ожидающих ресурсов в данный момент;
GETPID Возвращает PID процесса, выполнившего последний вызов semop;
GETVAL Возвращает значение одного семафора из множества;
GETZCNT Возвращает число процессов, ожидающих стопроцентного
освобождения ресурса;
SETALL Устанавливает значения семафоров множества, взятые из элемента
array объединения;
SETVAL Устанавливает значение конкретного семафора множества как элемент
val объединения.
Аргумент arg вызова semсtl() является примером объединения semun,
описанного в linux/sem.h следующим образом:
/* аргумент arg для системного вызова semctl */
union semun {
int val; /* значение для SETVAL-а */
struct semid_ds *buf; /* буфер для IPC_STAT и IPC_SET */
ushort *array; /* массив для GETALL и SETALL */
struct seminfo *__buf; /* буфер для IPC_INFO */
void *__pad;
};
Значения полей следующие:
val Определяет значение, в которое устанавливается семафор командой
SETVAL;
buf Используется командами IPC_STAT/IPC_SET. Представляет копию
внутренней структуры данных семафора, находящейся в ядре;
array Указатель для команд GETALL/SETALL. Ссылается на массив целых,
используемый для установки или получения всех значений семафоров
в множестве;
__buf, __pad Предназначены для ядра и почти, а то и вовсе не нужны разработчику
приложения. Эти два аргумента специфичны для LINUX, их нет в
других системах UNIX.
Поскольку этот особенный системный вызов наиболее сложен для восприятия
среди всех системных вызовов System V IPC, мы рассмотрим несколько его примеров в
действии.
Следующий отрывок выдает значение указанного семафора. Последний
аргумент (объединение) игнорируется, если используется команда GETVAL.
int get_sem_val( int sid, int semnum )
{
return( semctl(sid, semnum, GETVAL, 0));
}
Программа (semtool), приведенная в следующем примере, может
использоваться для интерактивной работы с семафорами. Поведение semtool()-а зависит
от аргументов командной строки, что удобно для вызова из скрипта shell-а. Позволяет
выполнять операции от создания и манипулирования до редактирования прав доступа и
удаления множества семафоров. Может быть использовано для управления
аргумента buf в объединении semun; IPC_SET Устанавливает значение элемента ipc_perm структуры semid_ds для множества; IPC_RMID Удаляет множество из ядра; GETALL Используется для получения значений всех семафоров множества. Целые значения запоминаются в массиве элементов unsigned short, на который указывает член объединения array; GETNCNT Выдает число процессов, ожидающих ресурсов в данный момент; GETPID Возвращает PID процесса, выполнившего последний вызов semop; GETVAL Возвращает значение одного семафора из множества; GETZCNT Возвращает число процессов, ожидающих стопроцентного освобождения ресурса; SETALL Устанавливает значения семафоров множества, взятые из элемента array объединения; SETVAL Устанавливает значение конкретного семафора множества как элемент val объединения. Аргумент arg вызова semсtl() является примером объединения semun, описанного в linux/sem.h следующим образом: /* аргумент arg для системного вызова semctl */ union semun { int val; /* значение для SETVAL-а */ struct semid_ds *buf; /* буфер для IPC_STAT и IPC_SET */ ushort *array; /* массив для GETALL и SETALL */ struct seminfo *__buf; /* буфер для IPC_INFO */ void *__pad; }; Значения полей следующие: val Определяет значение, в которое устанавливается семафор командой SETVAL; buf Используется командами IPC_STAT/IPC_SET. Представляет копию внутренней структуры данных семафора, находящейся в ядре; array Указатель для команд GETALL/SETALL. Ссылается на массив целых, используемый для установки или получения всех значений семафоров в множестве; __buf, __pad Предназначены для ядра и почти, а то и вовсе не нужны разработчику приложения. Эти два аргумента специфичны для LINUX, их нет в других системах UNIX. Поскольку этот особенный системный вызов наиболее сложен для восприятия среди всех системных вызовов System V IPC, мы рассмотрим несколько его примеров в действии. Следующий отрывок выдает значение указанного семафора. Последний аргумент (объединение) игнорируется, если используется команда GETVAL. int get_sem_val( int sid, int semnum ) { return( semctl(sid, semnum, GETVAL, 0)); } Программа (semtool), приведенная в следующем примере, может использоваться для интерактивной работы с семафорами. Поведение semtool()-а зависит от аргументов командной строки, что удобно для вызова из скрипта shell-а. Позволяет выполнять операции от создания и манипулирования до редактирования прав доступа и удаления множества семафоров. Может быть использовано для управления 69
Страницы
- « первая
- ‹ предыдущая
- …
- 67
- 68
- 69
- 70
- 71
- …
- следующая ›
- последняя »