1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-28 01:32:09 +01:00
Files
archived-doc-ru/reference/sem/functions/msg-receive.xml
2024-05-26 01:01:17 +03:00

225 lines
10 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: f7e33278a909d7f7bf491f77cb10c93581091736 Maintainer: rjhdby Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.msg-receive" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>msg_receive</refname>
<refpurpose>Получает сообщение из очереди сообщений</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>bool</type><methodname>msg_receive</methodname>
<methodparam><type>SysvMessageQueue</type><parameter>queue</parameter></methodparam>
<methodparam><type>int</type><parameter>desired_message_type</parameter></methodparam>
<methodparam><type>int</type><parameter role="reference">received_message_type</parameter></methodparam>
<methodparam><type>int</type><parameter>max_message_size</parameter></methodparam>
<methodparam><type>mixed</type><parameter role="reference">message</parameter></methodparam>
<methodparam choice="opt"><type>bool</type><parameter>unserialize</parameter><initializer>&true;</initializer></methodparam>
<methodparam choice="opt"><type>int</type><parameter>flags</parameter><initializer>0</initializer></methodparam>
<methodparam choice="opt"><type>int</type><parameter role="reference">error_code</parameter><initializer>&null;</initializer></methodparam>
</methodsynopsis>
<para>
Функция <function>msg_receive</function> получает первое сообщение из очереди сообщений
<parameter>queue</parameter> с типом, который указали в параметре <parameter>desired_message_type</parameter>.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>queue</parameter></term>
<listitem>
<para>
Очередь сообщений.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>desired_message_type</parameter></term>
<listitem>
<para>
Если для параметра <parameter>desired_message_type</parameter> указали значение 0, возвращается первое
сообщение из очереди. Если значение параметра <parameter>desired_message_type</parameter> больше 0, то
возвращается первое сообщение с указанным типом. Если значение параметра <parameter>desired_message_type</parameter>
меньше 0, то возвращается первое сообщение с типом, которое меньше или равно по модулю
значению параметра <parameter>desired_message_type</parameter>. Если нет сообщений,
которые соответствуют критериям, скрипт ожидает их появления в очереди.
Это поведение изменяют через константу <constant>MSG_IPC_NOWAIT</constant>
в параметре <parameter>flags</parameter>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>received_message_type</parameter></term>
<listitem>
<para>
В этом параметре сохраняется тип полученного сообщения.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>max_message_size</parameter></term>
<listitem>
<para>
Максимальный размер принимаемого сообщения задаётся в параметре <parameter>max_message_size</parameter>;
если сообщение в очереди больше этого размера, то функция завершается ошибкой
(если флаг <parameter>flags</parameter> не установили так, как рассказывает описание этого параметра).
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>message</parameter></term>
<listitem>
<para>
Полученное сообщение сохраняется в параметре <parameter>message</parameter>,
если не было ошибок при получении.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>unserialize</parameter></term>
<listitem>
<para>
Если для параметра установили значение &true;, сообщение рассматривается как сериализованое
тем же механизмом, что и в модуле сессий. Сообщение десериализуется,
а затем возвращается в скрипт. Это помогает легко получать массивы
и сложные объекты из других PHP-скриптов, или, если используется WDDX-сериализатор,
из любых совместимых с WDDX источников.
</para>
<para>
Если для параметра <parameter>unserialize</parameter> указали значение &false;,
сообщение возвращается в виде бинарно-безопасной строки.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>flags</parameter></term>
<listitem>
<para>
Необязательный параметр <parameter>flags</parameter> разрешает передать
флаги в низкоуровневый системный вызов msgrcv. По умолчанию его значение 0,
но можно указать одно или несколько следующих значений (путём сложения
или через операцию побитового ИЛИ).
<table>
<title>Flag values for msg_receive</title>
<tgroup cols="2">
<tbody>
<row>
<entry><constant>MSG_IPC_NOWAIT</constant></entry>
<entry>
Если нет сообщений, которые удовлетворяют условиям параметра <parameter>desired_message_type</parameter>,
возвращаться немедленно, а не ждать. Функция завершается ошибкой и возвращает
целочисленное значение <constant>MSG_ENOMSG</constant>.
</entry>
</row>
<row>
<entry><constant>MSG_EXCEPT</constant></entry>
<entry>
Установка этого флага в комбинации с положительным значением параметра
<parameter>desired_message_type</parameter>,
позволяет получить первое сообщение, тип которого не равен значению
<parameter>desired_message_type</parameter>.</entry>
</row>
<row>
<entry><constant>MSG_NOERROR</constant></entry>
<entry>
Если размер сообщения превышает значение параметра <parameter>max_message_size</parameter>,
то установка этого флага приводит к усечению сообщения до значения параметра <parameter>max_message_size</parameter>
без сигнализирования об ошибке.
</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>error_code</parameter></term>
<listitem>
<para>
Если функция завершается аварийно, необязательный параметр <parameter>error_code</parameter>
будет содержать значение системной переменной errno.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
&return.success;
</para>
<para>
При успешном завершении, структура данных очереди сообщений обновляется следующим образом:
элемент <literal>msg_lrpid</literal> содержит идентификатор вызвавшего процесса,
<literal>msg_qnum</literal> уменьшается на 1,
а <literal>msg_rtime</literal> устанавливается в соответствии с текущим временем.
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>8.0.0</entry>
<entry>
Параметр <parameter>queue</parameter> теперь ожидает экземпляр класса <classname>SysvMessageQueue</classname>;
раньше ожидался ресурс (<type>resource</type>).
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>msg_remove_queue</function></member>
<member><function>msg_send</function></member>
<member><function>msg_stat_queue</function></member>
<member><function>msg_set_queue</function></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->