Linux: Полное руководство
Шрифт:
Вместе с режимом IPC_CREAT можно указывать права доступа к очереди с помощью операции OR:
Если произошла ошибка и msgget вернул -1, то переменная errno устанавливается следующим образом:
♦ EACCESS — у вас нет прав доступа к объекту IPC;
♦ EEXIST — очередь уже существует, создание невозможно, но возможно подключение к очереди;
♦ EIDRM — очередь помечена для удаления;
♦ ENOENT — очередь не существует (в случае подключения);
♦ ENOMEM — не хватает памяти для создания очереди;
♦ ENOSPC —
Следующий код создает очередь сообщений:
26.5.3. Постановка сообщения в очередь
Для постановки сообщения в очередь используется вызов msgsnd:
Первый аргумент — это идентификатор очереди, в которую нужно добавить сообщение. Данный идентификатор мы предварительно получаем с помощью системного вызова msgget. Второй параметр — это указатель на буфер сообщения. Третий аргумент — это длина сообщения без учета типа сообщения (4 байта). Последний аргумент обычно устанавливают равным 0 или IPC_NOWAIT, если вы не хотите, чтобы процесс был блокирован при постановке сообщения в очередь, в случае переполнения очереди. По умолчанию (когда флаг равен 0), если очередь переполнена, ваш процесс будет блокирован до тех пор, пока сообщение не будет поставлено в очередь.
Как обычно, в случае успеха вызов возвращает 0, а если произошла ошибка, то -1. С помощью errno можно анализировать ошибку:
♦ EAGAIN — очередь переполнена, а вы используете флаг IPC_NOWAIT, то есть сообщение будет удалено и вам нужно заново поставить его в очередь (отсюда и название ошибки — AGAIN (опять));
♦ EACCESS — у вас недостаточно прав для записи сообщения в очередь;
♦ EFAULT— неверный адрес буфера msgp (невозможно получить доступ к этому адресу);
♦ EIDRM — очередь сообщений удалена;
♦ EINVAL — ошибка в аргументах, например, неправильное значение идентификатора очереди, отрицательный тип сообщения, неправильный размер сообщения и т.д.
♦ ENOMEM — не хватает памяти.
Следующий фрагмент кода демонстрирует постановку сообщения в очередь;
Наверное, вам уже не терпится увидеть реально работающий пример, а не куски кода, которые только отчасти связаны между собой. В листинге 26.5 представлена программа, создающая очередь сообщения и записывающая в нее сообщение.
Листинг 26.5. Пример работы с очередью
После запуска этой программы запустите программу ipcs и посмотрите на статус только что отправленного сообщения. Теперь напишем программу, которая получит это сообщение.
Заповедник гоблинов (сборник)
Фантастика:
научная фантастика
рейтинг книги
Брет Гарт. Том 6
Приключения:
вестерны
рейтинг книги
Дневники 1928-1929
Документальная литература:
биографии и мемуары
рейтинг книги
Точка Бифуркации XVI
16. ТБ
Фантастика:
аниме
фэнтези
попаданцы
рейтинг книги
Нирвана
7. Миры Доставки
Фантастика:
боевая фантастика
космическая фантастика
рейтинг книги
Супервольф
Секретный фарватер
Проза:
современная проза
рейтинг книги
Я – Стрела. Трилогия
Я - Стрела
Любовные романы:
любовно-фантастические романы
эро литература
рейтинг книги
Дважды одаренный. Том VI
6. Дважды одаренный
Фантастика:
аниме
альтернативная история
фэнтези
фантастика: прочее
рейтинг книги
Обратная сторона пути
11. Хроники странного королевства
Фантастика:
фэнтези
рейтинг книги
Вечный. Книга III
3. Вечный
Фантастика:
фэнтези
попаданцы
рпг
рейтинг книги
Догадка Ферма
3. Луи Фронсак
Детективы:
исторические детективы
рейтинг книги
Первый среди равных. Книга IV
4. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
рейтинг книги
Есть время жить
Эпоха мертвых
Фантастика:
боевая фантастика
рейтинг книги
Письма (1870)
Проза:
русская классическая проза
рейтинг книги