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

 ushort cgid; /* идентификатор группы создателя */

 ushort mode; /* права доступа */

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

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

};

struct msquid_ds {

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

 short pad1[7]; /* используется системой */

 ushort msg_qnum; /* количество сообщений в очереди */

 ushort msg_qbytes; /* максимальный размер очереди в байтах */

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

 ushort msg_lrpid; /* идентификатор процесса, связанного с последним получением сообщения */

 time_t msg_stime; /* время последней посылки сообщения */

 time_t msg_rtime; /* время последнего получения сообщения */

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

};

Типы операций:

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

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

IPC_RMID Удалить из системы очередь сообщений с идентификатором id

мsgget

#include ‹sys/types.h›

#include ‹sys/ipc.h›

#include ‹sys/msg.h›

msgget(key, flag)

key_t key;

int flag;

Функция msgget возвращает идентификатор очереди сообщений, имя которой указано в key. Параметр key может указывать на то, что возвращаемый идентификатор относится к частной очереди (IPC_PRIVATE), в этом случае создается новая очередь сообщений. С помощью параметра flag можно сделать указание о необходимости создания очереди (IPC_CREAT), а также о том, что создание очереди должно выполняться монопольно (IPC_EXCL). В последнем случае, если очередь уже существует, функция msgget дает отказ.

мsgsnd и msgrcv

#include ‹sys/types.h›

#include ‹sys/ipc.h›

#include ‹sys/msg.h›

msgsnd(id, msgp, size, flag)

int id, size, flag;

struct msgbuf *msgp;

msgrcv(id, msgp, size, type, flag)

int id, size, type, flag;

struct msgbuf *msgmp;

Функция msgsnd посылает сообщение указанного размера в байтах (size) из буфера msgp в очередь сообщений с идентификатором id. Структура msgbuf определена следующим образом:

struct msgbuf {

 long mtype;

 char mtext[];

};

Если в параметре flag бит IPC_NOWAIT сброшен, функция msgsnd будет приостанавливаться в тех случаях, когда размер отдельного сообщения или число сообщений в системе превышают допустимый максимум. Если бит IPC_NOWAIT установлен, функция msgsnd в этих случаях прерывает свое выполнение. Функция msgrcv принимает сообщение из очереди с идентификатором id. Если параметр type имеет нулевое значение, из очереди будет выбрано сообщение, первое по счету; если положительное значение, из очереди выбирается первое сообщение данного типа; если отрицательное значение, из очереди выбирается сообщение, имеющее самый младший тип среди тех типов, значение которых не превышает абсолютное значение параметра type. В параметре size указывается максимальный размер сообщения, ожидаемого пользователем. Если в параметре flag установлен бит MSG_NOERROR, в том случае, когда размер получаемого сообщения превысит предел, установленный параметром size, ядро обрежет это сообщение. Если же соответствующий бит сброшен, в подобных случаях функция будет возвращать ошибку. Если в параметре flag бит IPC_NOWAIT сброшен, функция msgrcv приостановит свое выполнение до тех пор, пока сообщение, удовлетворяющее указанному в параметре type условию, не будет получено. Если соответствующий бит сброшен, функция завершит свою работу немедленно. Функция msgrcv возвращает размер полученного сообщения (в байтах).

niсе

nice(increment)

int increment;

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

оpen

#include ‹fcntl.h›

open(filename, flag, mode)

char *filename;

int flag, mode;

Функция open выполняет открытие указанного файла в соответствии со значением параметра flag. Значение параметра flag представляет собой комбинацию из следующих разрядов (причем из первых трех разрядов может быть использован только один):

O_RDONLY открыть только для чтения

O_WRONLY открыть только для записи

O_RDWR открыть для чтения и записи

O_NDELAY если файл является специальным файлом устройства, функция возвращает управление, не дожидаясь ответного сигнала; если файл является поименованным каналом, функция в случае неудачи возвращает управление немедленно (с индикацией ошибки, когда бит O_WRONLY установлен), не дожидаясь открытия файла другим процессом

O_APPEND добавляемые данные записывать в конец файла

O_CREAT если файл не существует, создать его; режим создания (mode) имеет тот же смысл, что и в функции creat; если файл уже существует, данный флаг игнорируется

O_TRUNC укоротить длину файла до 0

O_EXCL если этот бит и бит O_CREAT установлены и файл существует, функция не будет выполняться; это так называемое "монопольное открытие"

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

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