• 5996阅读
  • 3回复

IPC message between Qt and C/C++ ? [复制链接]

上一主题 下一主题
离线rr_tw
 
只看楼主 倒序阅读 楼主  发表于: 2010-04-07
各位大大好
我目前在一个无法提供QtDBus的embedded平台上开发软体
想做到Qt编译出来的exe
与一般C/C++编译出来的exe
之间的相互沟通...

目前开发平台:ubuntu 8.0.4
目标运作平台:MIPS SoC w/i embedded linux


因为目标运作平台目前没有QtDBus的支援,我采取如下的写法:
一般C程式,属于IPC message发送端
  1. #include <unistd.h>
  2. #include <sys/ipc.h>
  3. #include <sys/msg.h>
  4. #define MESSAGE_BUFFER 128
  5. struct Messages
  6. {
  7.   long mtype;
  8.   char mtext[MESSAGE_BUFFER];
  9. };
  10. int main(int argc, char *argv[])
  11. {
  12.   key_t key=0x1024;
  13.   int msgId=0, received=0, i=0;
  14.   struct Messages msgS;
  15.   msgId=msgget(key, 0666|IPC_CREAT);
  16.   printf("SEND : Begin send IPC message to other process...\n");
  17.   strcpy(msgS.mtext, "Message from other(non-Qt) c process !!!\n");
  18.   for(i=0; i<10; i++)
  19.   {
  20.     printf("SEND : Sending %d...\n", i+1);
  21.     msgsnd(msgId, &msgS, MESSAGE_BUFFER, 0);
  22.     sleep(1);
  23.   }
  24.   printf("SEND : Sender terminated.\n");  
  25.   return 0;
  26. }

-------------------------------------

Qt程式,属于接收端
  1. #include <QtCore/QCoreApplication>
  2. #include <unistd.h>
  3. #include <sys/ipc.h>
  4. #include <sys/msg.h>
  5. #define MESSAGE_BUFFER 128
  6. struct Messages
  7. {
  8.   long mtype;
  9.   char mtext[MESSAGE_BUFFER];
  10. };
  11. int main(int argc, char *argv[])
  12. {
  13.   QCoreApplication a(argc, argv);
  14.   key_t key=0x1024;
  15.   int msgId=0, result=0;
  16.   struct Messages msgS;
  17.   strcpy(msgS.mtext, "...");
  18.   fprintf(stderr, "RECEIVE : Begin receive IPC message from other process...\n");
  19.   msgId=msgget(key, 0);
  20.   while(1)
  21.   {
  22.     result=msgrcv(msgId, &msgS, MESSAGE_BUFFER, 0, IPC_NOWAIT);
  23.     fprintf(stderr, "RECEIVE : Received message> %s\n", msgS.mtext);
  24.     fprintf(stderr, "RECEIVE : Result> %d\n", result);
  25.     result=0;
  26.     sleep(1);
  27.   }
  28.   fprintf(stderr, "\nRECEIVE : Ending program...\n");
  29.   return a.exec();
  30. }

-------------------------------------

但接收端一直得到-1的状态(没收到IPC message)
输出结果
  1. RECEIVE : Received message> ...
  2. RECEIVE : Result> -1
  3. RECEIVE : Received message> ...
  4. RECEIVE : Result> -1
  5. RECEIVE : Received message> ...
  6. RECEIVE : Result> -1
  7. RECEIVE : Received message> ...
  8. RECEIVE : Result> -1
  9. RECEIVE : Received message> ...
  10. RECEIVE : Result> -1
  11. RECEIVE : Received message> ...
  12. RECEIVE : Result> -1


可以请大大们帮忙看看是怎么回事吗?

附注:我是用繁体中文的,用工具转简体贴过来。
可能有些名词用语不太一样还请海涵~
中華民族,中華聯邦,這主意如何?
离线rr_tw
只看该作者 1楼 发表于: 2010-04-08
自己頂~

高手、大侠、或任何建议都欢迎
请大家给个思考方向呀
中華民族,中華聯邦,這主意如何?
离线rr_tw
只看该作者 2楼 发表于: 2010-04-14
有沒有高手幫忙看看呀...或是有沒有QCOP的sample code可以參考的?
中華民族,中華聯邦,這主意如何?
离线rr_tw
只看该作者 3楼 发表于: 2010-04-21
高手都隱居去了嗎......
中華民族,中華聯邦,這主意如何?
快速回复
限100 字节
 
上一个 下一个