ВУЗ:
Составители:
250
где 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).
Основным системным вызовом для манипулирования семафором
является
int semop (int semid, struct sembuf *op_array, int count)
где semid – это ранее полученный дескриптор группы семафоров;
op_array – массив структур sembuf
struct sembuf {
Страницы
- « первая
- ‹ предыдущая
- …
- 248
- 249
- 250
- 251
- 252
- …
- следующая ›
- последняя »
