Files
php-doc-ru/reference/sem/functions/msg-receive.xml
Alexey Pyltsyn 0057a44d6e Upd
git-svn-id: https://svn.php.net/repository/phpdoc/ru/trunk@343995 c90b9560-bf6c-de11-be94-00142212c4b1
2018-01-28 08:52:19 +00:00

203 lines
9.1 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: b8758b0605e80c4e3610137b7502a6abeea5c69b Maintainer: rjhdby Status: ready -->
<!-- Reviewed: yes -->
<!-- $Revision$ -->
<refentry xmlns="http://docbook.org/ns/docbook" xml:id="function.msg-receive">
<refnamediv>
<refname>msg_receive</refname>
<refpurpose>Получение сообщения из очереди сообщений</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>bool</type><methodname>msg_receive</methodname>
<methodparam><type>resource</type><parameter>queue</parameter></methodparam>
<methodparam><type>int</type><parameter>desiredmsgtype</parameter></methodparam>
<methodparam><type>int</type><parameter role="reference">msgtype</parameter></methodparam>
<methodparam><type>int</type><parameter>maxsize</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">errorcode</parameter></methodparam>
</methodsynopsis>
<para>
<function>msg_receive</function> получает первое сообщение из задаваемой параметром
<parameter>queue</parameter> очереди сообщений с типом, указанным в <parameter>desiredmsgtype</parameter>.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>queue</parameter></term>
<listitem>
<para>
Очередь.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>desiredmsgtype</parameter></term>
<listitem>
<para>
Если в <parameter>desiredmsgtype</parameter> указано 0, возвращается первое
сообщение из очереди. Если <parameter>desiredmsgtype</parameter> больше 0, то
возвращается первое сообщение с указанным типом. Если <parameter>desiredmsgtype</parameter>
меньше 0, то возвращается первое сообщение с типом, меньшим или равным по модулю
указанному в <parameter>desiredmsgtype</parameter>. Если нет сообщений,
соответствующих критериям, ваш скрипт ожидает их появления в очереди.
Вы можете изменить это поведение, указав <constant>MSG_IPC_NOWAIT</constant> в
параметре <parameter>flags</parameter>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>msgtype</parameter></term>
<listitem>
<para>
В этом параметре сохраняется тип полученного сообщения.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>maxsize</parameter></term>
<listitem>
<para>
Максимальный размер принимаемого сообщения задаётся в <parameter>maxsize</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>desiredmsgtype</parameter>,
возвращаться немедленно, а не ждать. Функция завершается ошибкой и возвращает
целочисленное значение <constant>MSG_ENOMSG</constant>.
</entry>
</row>
<row>
<entry><constant>MSG_EXCEPT</constant></entry>
<entry>
Использование этого флага в комбинации с указынным в
<parameter>desiredmsgtype</parameter> положительным значением,
позволяет получить первое сообщение, тип которого не равен значению
<parameter>desiredmsgtype</parameter>.</entry>
</row>
<row>
<entry><constant>MSG_NOERROR</constant></entry>
<entry>
Если размер сообщения превышает <parameter>maxsize</parameter>,
то установка этого флага приводит к усечению сообщения до <parameter>maxsize</parameter>
без сигнализирования об ошибке.
</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>errorcode</parameter></term>
<listitem>
<para>
Если функция завершается аварийно, необязательный параметр <parameter>errorcode</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="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
-->