在qnx下使用fifo在两个进程之间共享数据的例子

[复制链接]
 楼主| keer_zu 发表于 2022-9-26 13:54 | 显示全部楼层 |阅读模式
在qnx下使用fifo在两个进程之间共享数据的例子:

  1. #include <sys/types.h>
  2. #include <sys/stat.h>
  3. #include <fcntl.h>  
  4. #include <iostream>


  5. //int mkfifo( const char* path,
  6. //            mode_t mode );



  7. int main(void)
  8. {
  9.         int ret,fd,pid;
  10.        
  11.        
  12.         ret = mkfifo("/var/fifo1",S_IRUSR | S_IWUSR);
  13.         std::cout << "ret: " << ret << std::endl;

  14.         pid = fork();
  15.         if (pid > 0) {
  16.                 std::cout << "- parent -" << std::endl;
  17.                 fd = open("/var/fifo1",O_RDONLY,0);
  18.                 if(fd < 0){
  19.                         std::cout << "open error!\n" ;
  20.                         return -1;
  21.                 }
  22.                 char buf1[500];
  23.                 while(1) {
  24.                         std::cout << "please waiting...\n";
  25.                         ssize_t s = read(fd,buf1,sizeof(buf1)-1);
  26.                         if(s > 0) {
  27.                                 buf1[s-1] = 0;
  28.                                 std::cout << "Server recv: " << buf1 << std::endl;
  29.                         } else if (s == 0) {
  30.                                 std::cout << "client quit,exit ..." << std::endl;
  31.                                 break;
  32.                         }
  33.                 }
  34.                
  35.         } else if (pid == 0){
  36.                 std::cout << "- child -" << std::endl;
  37.                 fd = open("/var/fifo1",O_WRONLY,0);
  38.                 if(fd < 0){
  39.                         std::cout << "open error!\n" ;
  40.                         return -1;
  41.                 }
  42.                 char buf1[500];
  43.                 while(1) {
  44.                         std::cout << "client\n";
  45.                         fflush(stdout);
  46.                 ssize_t s = read(0,buf1,sizeof(buf1)-1);//向管道文件中写数据
  47.                 if(s > 0) {
  48.                                 buf1[s] = 0;//以字符串的形式写
  49.                                 write(fd,buf1,strlen(buf1));
  50.                 }
  51.                 }
  52.         } else {
  53.                 std::cout << "fork error!\n" ;
  54.         }
  55.        
  56.                 std::cout << "file is exit!\n" ;
  57.                 close(ret);
  58.        

  59.        
  60. }



 楼主| keer_zu 发表于 2022-9-26 13:57 | 显示全部楼层
运行结果:

3849263313f407bb69.png
 楼主| keer_zu 发表于 2022-9-26 14:43 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群:49734243 Email:zukeqiang@gmail.com

1478

主题

12912

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:qq群:49734243 Email:zukeqiang@gmail.com

1478

主题

12912

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部