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

文章作者 100test 发表时间 2007:03:14 16:41:08
来源 100Test.Com百考试题网


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". }


相关文章


Linux进程间通信:管道及有名管道(2)
Linux操作系统中常见的桌面环境介绍
Linux程序开发:QT的内部进程通信(4)
Linux程序开发:QT的内部进程通信(3)
Linux操作系统下的CAD系统详细介绍(3)
Linux程序开发:QT的内部进程通信(2)
Linux操作系统下的CAD系统详细介绍(1)
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛