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
if(($key = ftok("/var/www/index.php", "G")) == -1)
    die("ftok");
if(!msg_queue_exists($key))
    die("message queue doesn't exists");
if(($msqid = msg_get_queue($key)) === FALSE)
    die("msg_get_queue");
echo "Sending text to msg queue.\n";
if(!msg_send($msqid, 12, "Hello from PHP!\0", false))
    die("msg_send");
echo "Done"
?>