Читаем Архитектура операционной системы UNIX (ЛП) полностью

Переменная sem_num содержит указатель в массиве семафоров, ассоциированный с данной операцией, а переменная sem_flg — флаги для данной операции. Переменная sem_op может принимать следующие значения:

отрицательное если сумма значения семафора и значения sem_op ›= 0, значение семафора изменяется на величину sem_op; в противном случае, функция приостанавливает свое выполнение, если это разрешено флагом

положительное увеличить значение семафора на величину sem_op

нулевое если значение семафора равно 0, продолжить выполнение; в противном случае, приостановить выполнение, если это разрешается флагом

Если для данной операции в переменной sem_flg установлен флаг IPC_NOWAIT, функция semop возвращает управление немедленно в тех случаях, когда она должна была бы приостановиться. Если установлен флаг SEM_UNDO, восстанавливается предыдущее значение семафора (sem_op вычитается из текущей суммы типов операций). Когда процесс завершится, значение семафора будет увеличено на эту сумму. Функция semop возвращает значение последней операции над семафором.

setpgrр

setpgrp()

Функция setpgrp приравнивает значение идентификатора группы, к которой принадлежит текущий процесс, значению идентификатора самого процесса и возвращает новое значение идентификатора группы.

setuid

setuid(uid)

int uid;

setgid(gid)

int gid;

Функция setuid устанавливает значения фактического и исполнительного кодов идентификации пользователя текущего процесса. Если вызывающий процесс исполняется под управлением суперпользователя, функция сбрасывает значения указанных кодов. В противном случае, если фактический код идентификации пользователя имеет значение, равное значению uid, функция setuid делает равным этому значению и исполнительный код идентификации пользователя. То же самое происходит, если значению uid равен код, сохраненный после выполнения setuid-программы, запускаемой с помощью функции exec. Функция setgid имеет тот же смысл по отношению к аналогичным групповым кодам.

shmctl

#include ‹sys/types.h›

#include ‹sys/ipc.h›

#include ‹sys/shm.h›

shmctl(id, cmd, buf)

int id, cmd;

struct shmid_ds *buf;

Функция shmctl выполняет различные операции над областью разделяемой памяти, ассоциированной с идентификатором id. Структура shmid_ds определена следующим образом:

struct shmid_ds {

  struct ipc_perm shm_perm; /* структура, описывающая права доступа */

  int shm_segsz; /* размер сегмента */

  int * pad1; /* используется системой */

  ushort shm_lpid; /* идентификатор процесса, связанного с последней операцией над областью */

  ushort shm_cpid; /* идентификатор процесса-создателя */

  ushort shm_nattch; /* количество присоединений к процессам */

  short pad2; /* используется системой */

  time_t shm_atime; /* время последнего присоединения */

  time_t shm_dtime; /* время последнего отсоединения */

  time_t shm_ctime; /* время последнего внесения изменений */

};

Операции:

IPC_STAT прочитать в буфер buf содержимое заголовка области, ассоциированной с идентификатором id

IPC_SET установить значения переменных shm_perm.uid, shm_perm.gid и shm_perm.mode (9 младших разрядов структуры) в заголовке области в соответствии с содержимым буфера buf

IPC_RMID удалить из системы область разделяемой памяти, ассоциированной с идентификатором id

shmget

#include ‹sys/types.h›

#include ‹sys/ipc.h›

#include ‹sys/shm.h›

shmget(key, size, flag)

key_t key;

int size, flag;

Функция shmget обращается к области разделяемой памяти или создает ее. Параметр size задает размер области в байтах. Параметры key и flag имеют тот же смысл, что и в функции msgget.

shmор

#include ‹sys/types.h›

#include ‹sys/ipc.h›

#include ‹sys/shm.h›

shmat(id, addr, flag)

int id, flag;

char *addr;

shmdt(addr)

char *addr;

Функция shmat присоединяет область разделяемой памяти, ассоциированную с идентификатором id, к адресному пространству процесса. Если параметр addr имеет нулевое значение, ядро само выбирает для присоединения области подходящий адрес. В противном случае оно пытается присоединить область, используя в качестве значение параметра addr в качестве адреса. Если в параметре flag установлен бит SHM_RND, ядро в случае необходимости округляет адрес. Функция shmat возвращает адрес, по которому область присоединяется фактически. Функция shmdt отсоединяет область разделяемой памяти, присоединенную ранее по адресу addr.

signal

#include ‹signal.h›

signal(sig, function)

int sig;

void (*func)();

Функция signal дает текущему процессу возможность управлять обработкой сигналов. Параметр sig может принимать следующие значения:

SIGHUP "зависание"

SIGINT прерывание

SIGQUIT прекращение работы

SIGILL запрещенная команда

SIGTRAP внутреннее прерывание, связанное с трассировкой

SIGIOT инструкция IOT

SIGEMT инструкция EMT

SIGFPE особая ситуация при работе с числами с плавающей запятой

SIGKILL удаление из системы

SIGBUS ошибка в шине

SIGSEGV нарушение сегментации

SIGSYS недопустимый аргумент в вызове системной функции

Перейти на страницу:

Похожие книги