Переменная 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 недопустимый аргумент в вызове системной функции
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии