Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
PHP: msg_get_queue - Manual
[go: Go Back, main page]

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

search for in the

msg_queue_exists" width="11" height="7"/> <ftok
Last updated: Fri, 05 Sep 2008

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_queue_exists" width="11" height="7"/> <ftok
Last updated: Fri, 05 Sep 2008
 
add a note add a note User Contributed Notes
msg_get_queue
martin dot velek at gmail dot com
01-Aug-2007 08: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']==&&
   
$pole['msg_rtime']==&&
   
$pole['msg_qnum']==&&
   
$pole['msg_lspid']==&&
   
$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 02:55
#
# require --enable-sysvmsg configure option
#
# see phpinfo() to find how to check
#
joeldg AT listbid.com
03-May-2003 04: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" width="11" height="7"/> <ftok
Last updated: Fri, 05 Sep 2008
 
 
show source | credits | sitemap | contact | advertising | mirror sites