ВУЗ:
Составители:
91
Таким образом, флаг создания семафора можно указать так:
int flag = S_IRUSR | S_IWUSR | S_IRGRP | IPC_CREAT;
Системный вызов semctl имеет формат
int semctl (int semid, int sem_num, int command, union semun arg)
где semid – это идентификатор набора семафоров; sem_num – номер се-
мафора в группе; command – код операции; arg – указатель на структу-
ру, содержимое которой интерпретируется по-разному, в зависимости
от операции.
Объединение имеет вид
union semun
{
int val; /* устанавливает значение семафора только для SETVAL */
struct semid_ds *buf;
/* используется командами IPC_STAT и IPC_SET */
unsigned short *array; /* используется командами SETALL и GETALL */
};
Объединение semun всегда должен быть переопределен в глобальной
секции программы. Структура semid_ds выглядит следующим образом:
struct semid_ds {
struct ipc_perm sem_perm; /* разрешения на операции */
struct sem *sem_base; /* указатель на массив семафоров в наборе */
ushort sem_nsems; /* количество семафоров */
time_t sem_otime; /* время последнего вызова semop() */
time_t sem_ctime; /* время создания последнего IPC_SET */
};
Вызов semctl позволяет:
• уничтожить набор семафоров или индивидуальный семафор в
указанной группе (IPCRMID);
• вернуть значение отдельного семафора (GETVAL) или всех се-
мафоров (GETALL);
• установить значение отдельного семафора (SETVAL) или всех
семафоров (SETALL);
• вернуть число семафоров в наборе семафоров (GETPID).
Страницы
- « первая
- ‹ предыдущая
- …
- 89
- 90
- 91
- 92
- 93
- …
- следующая ›
- последняя »
