downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

msg_queue_exists> <ftok
Last updated: Fri, 13 Nov 2009

view this page in

msg_get_queue

(PHP 4 >= 4.3.0, PHP 5)

msg_get_queueメッセージキューを作成またはそれにアタッチする

説明

resource msg_get_queue ( int $key [, int $perms ] )

msg_get_queue() は、指定した key で System V メッセージキューにアクセスするために使用される ID を返します。 最初にコールされた際には、オプションの perms でメッセージキューを作成します。同じ key で 2 度目に msg_get_queue() がコールされると別の ID が返されますが、どちらの ID も同じメッセージキューを指します。

パラメータ

key

メッセージキューの数値 ID。

perms

キューのパーミッション。デフォルトは 0666 です。 メッセージキューがすでに存在する場合には、perms は無視されます。

返り値

リソースハンドルを返します。これを使用して、System V メッセージキューにアクセスします。

参考

  • msg_remove_queue() - メッセージキューを破棄する
  • msg_receive() - メッセージキューからメッセージを受信する
  • msg_send() - メッセージキューにメッセージを送信する
  • msg_stat_queue() - メッセージキューデータ構造体の情報を返す
  • msg_set_queue() - メッセージキューデータ構造体の情報を設定する



msg_queue_exists> <ftok
Last updated: Fri, 13 Nov 2009
 
add a note add a note User Contributed Notes
msg_get_queue
pail dot luo at gmail dot com
28-Feb-2009 05:22
A simple Sample to introduce Message Queue.

<?php
if ( sizeof($argv)<2 ) {
        echo
"Usage: $argv[0] stat|send|receive|remove msgType MSG [msg] \n\n" ;
        echo
"   EX: $argv[0] send 1 \"This is no 1\" \n" ;
        echo
"       $argv[0] receive ID \n" ;
        echo
"       $argv[0] stat \n" ;
        echo
"       $argv[0] remove \n" ;
        exit;
}

$MSGKey = "123456" ;

## Create or attach to a message queue
$seg = msg_get_queue($MSGKey) ;

switch (
$argv[1] ) {
    case
"send":
       
msg_send($seg, $argv[2], $argv[3]);
        echo
"msg_send done...\n" ;
        break;
       
    case
"receive":
       
$stat = msg_stat_queue( $seg );
        echo
'Messages in the queue: '.$stat['msg_qnum']."\n";
        if (
$stat['msg_qnum']>0 ) {
           
msg_receive($seg, $argv[2], $msgtype, 1024, $data);
           
var_dump($msgtype);
           
var_dump($data);
            echo
"\n";
        }
        else {
            echo
"No Msg...\n";
        }
        break;
   
    case
"stat":
     
print_r( msg_stat_queue($seg) );
        break;
       
    case
"remove":
       
msg_remove_queue($seg);
        break;
}
?>
david dot schueler at tel-billig dot de
17-Dec-2008 04:17
If you are getting this message on your *NIX box:

Warning: msg_get_queue() [function.msg-get-queue]: failed for key 0x12345678: No space left on device in /path/to/script.php on line 1

you may use the command "ipcrm" as root to clear the message queue. Use "man ipcrm" to get more info on it.
The default setting for maximum messages in the queue is stored in /proc/sys/fs/mqueue/msg_max. To increase it to a maximum of 100 messages, just run:
echo 100 > /proc/sys/fs/mqueue/msg_max

Please ensure to follow a good programming style and close/free all your message queues before your script exits to avoid those warning messages.
martin dot velek at gmail dot com
01-Aug-2007 11:23
Lack of IPC_EXCL makes me unhappy. Of course, you can use ftok() to generate a unique key. This code is not allmighty, another process under the same user can open the queue and function returns true. But in some situation it could help.

code:

<?
function ipcEXCL($res,$perm)
{
 $pole = msg_stat_queue($res);
 
 if($pole['msg_perm.uid']==posix_getuid() &&
    $pole['msg_perm.gid']==posix_getgid()  &&
    $pole['msg_perm.mode']==$perm  &&
    $pole['msg_stime']==0  &&
    $pole['msg_rtime']==0  &&
    $pole['msg_qnum']==0  &&
    $pole['msg_lspid']==0  &&
    $pole['msg_rspid']==0)
        return true;
 else
        return false;
}

$res=msg_get_queue($key,$perm);

if(ipcEXCL($res,$perm))
   echo "probably I am a creator:";
else
   echo "probably not";
?>
zxd at zhangxiaodong dot net
16-Dec-2004 05:55
#
# require --enable-sysvmsg configure option
#
# see phpinfo() to find how to check
#
joeldg AT listbid.com
02-May-2003 07:10
// Here is an example of working with message queues.
// if you have forked processes, this could be a great way of passing
// out work to them

// create the message queue
// pick a file..
  $key_t = msg_get_queue(ftok("/tmp/php_msgqueue.stat", 'R'),0666 | IPC_CREAT);

    // place two messages on the queue
    if (!msg_send ($key_t, 1, 'This is message #1', true, true, $msg_err))
       echo "Msg not sent because $msg_err\n";
    if (!msg_send ($key_t, 1, 'This is message #2 ', true, true, $msg_err))
       echo "Msg not sent because $msg_err\n";
     
    // lets look at the queue structure 'msg_qnum' is really what we want to see
    // it should be '2'
    print_r(msg_stat_queue($key_t));
   
    // pull off the stack
        if (msg_receive ($key_t, 1, $msg_type, 16384, $msg, true, 0, $msg_error)) {
           if ($msg == 'Quit');
           echo "$msg\n"; // prints 'This is message #1'
        } else {
           echo "Received $msg_error fetching message\n";
        }
    // look at the structure again, ms_qnum should be '1'   
    print_r(msg_stat_queue($key_t));
        if (msg_receive ($key_t, 1, $msg_type, 16384, $msg, true, 0, $msg_error)) {
           if ($msg == 'Quit');
           echo "$msg\n"; // prints 'This is message #2'
        } else {
           echo "Received $msg_error fetching message\n";
        }
   // look at the structure again, ms_qnum should be '0', no more messages on the queue
   print_r(msg_stat_queue($key_t)); 

   // get rid of the queue we created
   msg_remove_queue ($key_t);

msg_queue_exists> <ftok
Last updated: Fri, 13 Nov 2009
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites