Хотя большинство элементов этой структуры
Хотя большинство элементов этой структуры вас будет мало волновать, для какой-то законченности мы вкратце поясним каждый.
msg_perm
Экземпляр структуры ipc_perm, определенной в linux/ipc.h. Она содержит информацию о доступе для очереди сообщений, включая права доступа и информацию о создателе сообщения (uid и т.п.).
msg_first
Ссылка на первое сообщение в очереди (голова списка).
msg_last
Ссылка на последний элемент списка (хвост списка).
msg_stime
Момент времени (time_t) посылки последнего сообщения из очереди.
msg_rtime
Момент времени последнего изъятия элемента из очереди.
msg_ctime
Момент времени последнего изменения, проделанного в очереди (подробнее об этом позже).
wwait и rwait
Указатели в очередь ожидания ядра. Они используются, когда операция над очередью сообщений переводит процесс в состояние спячки (то есть очередь переполнена, и процесс ждет открытия).
msg_cbytes
Число байт, стоящих в очереди (суммарный размер всех сообщений).
msg_qnum
Количество сообщений в очереди на настоящий момент.
msg_qbytes
Максимальный размер очереди.
msg_lspid
PID процесса, пославшего последнее в очереди сообщение.
msg_lrpid
PID последнего процесса, взявшего из очереди сообщение.
Структура ipc_perm ядра
Информацию о доступе к IPC-объектам ядро хранит в структуре ipc_perm. Например, описанная выше структура очереди сообщений содержит одну структуру типа ipc_perm в качестве элемента. Следующее ее определение дано в linux/ipc.h. struct ipc_perm { key_t key; ushort uid; /* euid и egid владельца */ ushort gid; ushort cuid; /* euid и egid создателя */ ushort cgid; ushort mode; /* режим доступа, см. режимные флаги ниже */ ushort seq; /* порядковый номер использования гнезда */ };
Все приведенное выше говорит само за себя. Сохраняемая отдельно вместе с ключом IPC-объекта информация содержит данные о владельце и создателе этого объекта (они могут различаться). Режимы восьмеричного доступа также хранятся здесь, как unsigned short. Наконец, сохраняется порядковый номер использования гнезда. Каждый раз когда IPC объект закрывается через системный вызов (уничтожается), этот номер уменьшается на максимальное число объектов IPC, которые могут находиться в системе. Касается вас это значение? Нет.
Системный вызов msgget() нужен для того, чтобы создать очередь сообщений или подключиться к существующей. SYSTEM CALL: msgget() PROTOTYPE: int msgget( key_t key, int msgflg ); RETURNS: идентификатор очереди сообщений в случае успеха; -1 в случае ошибки. При этом errno = EACCESS (доступ отклонен) EEXIST (такая очередь уже есть, создание невозможно) EIDRM (очередь помечена как удаляемая) ENOENT (очередь не существует) ENOMEM (не хватает памяти для создания новой очереди) ENOSPC (исчерпан лимит на количество очередей)
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий