hello world

          隨筆 - 2, 文章 - 63, 評論 - 0, 引用 - 0
          數據加載中……

          php和c之間的消息通信

          查閱資料,發現c也有消息隊列函數,令我很興奮,找了一個c的列子,c本身消息隊列收發成功了。然后我嘗試php和c對發,因為c發送的的是c的結構體 struct,所以我尋求php生成c結構體struct的辦法,我用了pack,搜索了pack,或者php struct,出來的文章都是同一篇,完全不正確的,經過記錄c發送的數據,然后將我用php pack的數據做對比,發現數據是一模一樣的,但是,發送給c,c無法解析。還好我有點兒php擴展基礎,找到php的消息函數,一看:我失望了,php 的消息函數發送的struct是固定的,一個int和一個char[1],經過一番測試之后,能將一個數字和一個字符串發送給c了

          PHP代碼:
           1 
           2 <?php
           3 $id =  msg_get_queue ( 1 );  
           4     if (!msg_send ($id, 317, "sdsadsdsds", false, true, $msg_err))  
           5     {  
           6 
           7 echo "faile!";
           8         return "Msg not sent because $msg_err\n";  
           9 }else{
          10 echo "success!";
          11 }
          12 
          13    ?>

          C代碼:
           1 #include <stdio.h>  
           2 #include <stdlib.h>  
           3 #include <fcntl.h>  
           4 #include <string.h>  
           5 #include <unistd.h>  
           6 #include <sys/types.h>  
           7 #include <sys/ipc.h>  
           8 #include <sys/msg.h>  
           9 #define MAX_TEXT 512  
          10 #define BUFSIZE BUFSIZ  
          11   
          12 struct msg_st {  
          13     long mtype;  
          14     char mtext[1];  
          15 };  
          16   
          17 void logst(struct msg_st some_data);  
          18   
          19 int main(int argc,char **argv)  
          20 {  
          21         while(1){  
          22               
          23             int msgid1;  
          24             struct msg_st some_data1;  
          25             int msg_to_recevie = 0;  
          26             if((msgid1= msgget((key_t)1,0666|IPC_CREAT)) == -1)  
          27             {  
          28                 perror("msgget");  
          29                 exit(EXIT_FAILURE);  
          30             }         
          31             if(msgrcv(msgid1,(void *&some_data1, BUFSIZ, msg_to_recevie , 0== -1)  
          32             {  
          33                 perror("msgrcv");  
          34                 exit(EXIT_FAILURE);  
          35             }  
          36             printf("recevier mssage : %s, type= %d;\n", some_data1.mtext, some_data1.mtype);  
          37             //printf("%s, %d\n", msg_text, strlen(msg_text));  
          38               
          39             if(msgctl(msgid1,IPC_RMID,0== -1)  
          40             {  
          41                 fprintf(stderr,"msgctl(IPC_RMID) failed \n");  
          42                 exit(EXIT_FAILURE);  
          43             }  
          44             //break;  
          45             sleep(1);  
          46         }     
          47       
          48 


          參考鏈接:
          http://blog.csdn.net/leinchu/article/details/8132530
          http://blog.csdn.net/guoping16/article/details/6584024

          posted on 2015-03-12 14:46 聽風 閱讀(412) 評論(0)  編輯  收藏 所屬分類: 嵌入式

          主站蜘蛛池模板: 通化市| 台北市| 三台县| 辽阳市| 吉木乃县| 东丰县| 大化| 旌德县| 仁怀市| 沙雅县| 吕梁市| 温州市| 神农架林区| 赤城县| 南康市| 康乐县| 锡林浩特市| 化德县| 榆树市| 桦川县| 静乐县| 耿马| 北川| 甘洛县| 建阳市| 曲周县| 安塞县| 九龙县| 华安县| 伊宁县| 临沭县| 华阴市| 抚州市| 酒泉市| 政和县| 轮台县| 辛集市| 伊金霍洛旗| 民权县| 方城县| 永兴县|