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] )


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