Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : Semaphore, Shared Memory and IPC Functions : msg_get_queue

msg_get_queue

Create or attach to a message queue (PHP 4 >= 4.3.0, PHP 5)
resource msg_get_queue ( int key [, int perms] )

msg_get_queue() returns an id that can be used to access the System V message queue with the given key. The first call creates the message queue with the optional perms. A second call to msg_get_queue() for the same key will return a different message queue identifier, but both identifiers access the same underlying message queue.

Parameters

key
perms

Queue permissions. Default to 0666. If the message queue already exists, the perms will be ignored.

Return Values

Returns an id that can be used to access the System V message queue.

Code Examples / Notes » msg_get_queue

martin dot velek

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";
?>


joeldg

// 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);


zxd

#
# require --enable-sysvmsg configure option
#
# see phpinfo() to find how to check
#


Change Language


Follow Navioo On Twitter
ftok
msg_get_queue
msg_receive
msg_remove_queue
msg_send
msg_set_queue
msg_stat_queue
sem_acquire
sem_get
sem_release
sem_remove
shm_attach
shm_detach
shm_get_var
shm_put_var
shm_remove_var
shm_remove
eXTReMe Tracker