note 114831 added to function.msg-send
| From: | qeekin at gmail dot com | Date: | Fri, 11 Apr 2014 08:51:55 +0000 |
| Subject: | note 114831 added to function.msg-send | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-199246@lists.php.net to get a copy of this message | ||
I created example how to comunnicate with programe written in C throught messages queues. First run
C program (it will create queue) then PHP script.
C code compile with: gcc -std=c99 -o test_queue test_queue.c
test_queue.c:
/**
* Example how to use System V Messages Queues with PHP and C program.
* This is simple server which create message queue and receive message from it.
* Based on Beej's Guide to Unix IPC
* Autor: Jan Drazil, <qeekin at gmail dot com>
*/
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
/* Buffer struct for receiving messages */
struct php_buf {
long mtype;
char msg[200];
};
int main(void)
{
struct php_buf buf;
int msqid;
key_t key;
/* Generate key (/var/www/index.php must be accessible file) */
if((key = ftok("/var/www/index.php", 'G')) == -1) {
perror("ftok");
exit(EXIT_FAILURE);
}
/* Create message queue */
if((msqid = msgget(key, 0666 | IPC_CREAT)) == -1) {
perror("msgget");
exit(EXIT_FAILURE);
}
printf("Ready to get string from PHP!\n");
/* Receive message */
if(msgrcv(msqid, &buf, sizeof(buf.msg)-1, 0, 0) == -1) {
perror("msgrcv");
exit(EXIT_FAILURE);
}
/* Eliminate segmentation fault */
buf.msg[199] = '\0';
printf("Recieved from PHP: %s\n", buf.msg);
/* Destroy message queue */
if(msgctl(msqid, IPC_RMID, NULL) == -1) {
perror("msgctl");
exit(EXIT_FAILURE);
}
return EXIT_SUCCESS;
}
test_queue.php:
<?php
/**
* Example how to use System V Messages Queues with PHP and C program.
* This is simple server which create message queue and receive message from it.
* Based on Beej's Guide to Unix IPC
* Autor: Jan Drazil, <qeekin at gmail dot com>
*/
/* Generate key, param fot ftok must be same as in test_msg.c */
if(($key = ftok("/var/www/index.php", "G")) == -1)
die("ftok");
if(!msg_queue_exists($key))
die("message queue doesn't exists");
/* Connect to message queue */
if(($msqid = msg_get_queue($key)) === FALSE)
die("msg_get_queue");
echo "Sending text to msg queue.\n";
/* Send message to C program */
if(!msg_send($msqid, 12, "Hello from PHP!\0", false))
die("msg_send");
echo "Done"
?>
----
Server IP: 89.187.142.233
Probable Submitter: 147.229.14.183
----
Manual Page -- http://php.net/manual/en/function.msg-send.php
Edit -- https://master.php.net/note/edit/114831
Del: integrated -- https://master.php.net/note/delete/114831/integrated
Del: useless -- https://master.php.net/note/delete/114831/useless
Del: bad code -- https://master.php.net/note/delete/114831/bad+code
Del: spam -- https://master.php.net/note/delete/114831/spam
Del: non-english -- https://master.php.net/note/delete/114831/non-english
Del: in docs -- https://master.php.net/note/delete/114831/in+docs
Del: other reasons-- https://master.php.net/note/delete/114831
Reject -- https://master.php.net/note/reject/114831
Search -- https://master.php.net/manage/user-notes.php