您现在的位置: 北大青鸟广州湘计立德培训中心 >> 学习园地 >> it培训辅导 >> linux认证 >> 复习指导 >> 正文    
 
 

Linux程序开发:QT的内部进程通信(4)


3、 FIFO机制

当然,除了 Qt 内部所特有的通信机制之外,一般操作系统中常用的进程间通信机制同样可以用于 Qt 系统内部不同进程之间的通信。如消息队列、共享内存、信号量、管道等机制,其中有些机制,如信号量,在 Qt 中重新进行了封装;有些机制则可以直接调用操作系统的系统调用来实现。这里,有名管道是一种简单实用的通信机制,用户在对Qt内部机制

不甚了解的情况下,同样可以使用这种方法实现对象进程之间的通信。下面就对利用这种机制实现Qt内部进程之间的通信过程进行介绍。

首先,需要创建 FIFO,这个过程类似于创建文件,在系统中可以利用 mkfifo 命令来创建,这样就可以用 open 函数打开它,同时,一般的文件 I/O函数(close、read、write)都可以用于 FIFO。

在基于 Qt 的应用中,有很多应用采用了一种客户机-服务器模式,这时就可以利用 FIFO 在客户机和服务器之间传递数据。例如,有一个服务器,它负责接收底层程序发来的消息,同时,它与很多客户机有关,服务器需要将收到的不同消息发送到不同的客户机,而每个客户机也有请求需要发给服务器,进而发给底层程序。

下面是服务器端的程序示例:(架设已有客户端进程为读而打开/dev/fifoclient1和/dev/fifoclient1)

  



  fd = open("/dev/fifoserver", O_NONBLOCK|O_RDONLY);



    file = fdopen(fd, "r"); 



  ret = fgets(buf, MAX_LINE, file );



   if(buf[0] == '0')



   { 



    QFile fd_file("/dev/fifoclient1");



    QString temp(buf);



    if(fd_file.open(IO_WriteOnly|IO_Append)) {



       QTextStream t(&fd_file);



   t<< temp; 



    fd_file.close();



   }



   else if(buf[0] == '1')



   { 



    QFile fd_file("/dev/fifoclient2");



    QString temp(buf);



    if(fd_file.open(IO_WriteOnly|IO_Append)) {



       QTextStream t(&fd_file);



   t<< temp; 



    fd_file.close();



   }



  ……



 
 

在该程序中,服务器接收底层发来的信息(这里假设也是由 FIFO 管道传来),然后根据收到的信息内容,如第一个字节的内容,将信息发到不同客户端的管道中,实现对信息的正确分发。

客户端程序示例如下:(假设服务器端已经为读而打开 /dev/fifo 管道)

 

 



  QFile out_file("/dev/fifo");



   if(out_file.open(IO_WriteOnly|IO_Append)) {



   QTextStream t(&out_file); 



  t << text << "\n"; }

友情提示:如果您对北大青鸟的学费、课程、就业有疑问,可以点击此处留言,或拨打电话:020-34330086,我们会有专业课程顾问细心为你解答问题,免费为你定身做前景分析和职业规划!

 
相关阅读
Linux程序开发:QT的内部进程通信(3
Linux程序开发:QT的内部进程通信(2
Linux程序开发:QT的内部进程通信(1
Linux程序开发:QT中的多线程编程(4
Linux程序开发:QT中的多线程编程(2
Linux程序开发:QT中的多线程编程(3
Linux程序开发:QT中的多线程编程(1
 
 
 
 

姓名:  

手机:  

Q Q号:  



 
 
 
   
 
 
  • 此栏目下没有推荐文章
  •  
     
     
    关于我们 | 培训课程 | 学校位置 | 招生问答 | 在线留言 |

    地址:广州市海珠区同福东路644号天一酒店5楼全层(市二宫正门旁)
    咨询报名电话:020-34330086 020-39862039(24小时热线) 传真:020 - 34351700
    版权所有· 广州北大青鸟APTECH(湘计立德)授权培训中心