打印

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

[复制链接]
588|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
keer_zu|  楼主 | 2022-9-26 13:54 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
在qnx下使用fifo在两个进程之间共享数据的例子:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>  
#include <iostream>


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



int main(void)
{
        int ret,fd,pid;
       
       
        ret = mkfifo("/var/fifo1",S_IRUSR | S_IWUSR);
        std::cout << "ret: " << ret << std::endl;

        pid = fork();
        if (pid > 0) {
                std::cout << "- parent -" << std::endl;
                fd = open("/var/fifo1",O_RDONLY,0);
                if(fd < 0){
                        std::cout << "open error!\n" ;
                        return -1;
                }
                char buf1[500];
                while(1) {
                        std::cout << "please waiting...\n";
                        ssize_t s = read(fd,buf1,sizeof(buf1)-1);
                        if(s > 0) {
                                buf1[s-1] = 0;
                                std::cout << "Server recv: " << buf1 << std::endl;
                        } else if (s == 0) {
                                std::cout << "client quit,exit ..." << std::endl;
                                break;
                        }
                }
               
        } else if (pid == 0){
                std::cout << "- child -" << std::endl;
                fd = open("/var/fifo1",O_WRONLY,0);
                if(fd < 0){
                        std::cout << "open error!\n" ;
                        return -1;
                }
                char buf1[500];
                while(1) {
                        std::cout << "client\n";
                        fflush(stdout);
                ssize_t s = read(0,buf1,sizeof(buf1)-1);//向管道文件中写数据
                if(s > 0) {
                                buf1[s] = 0;//以字符串的形式写
                                write(fd,buf1,strlen(buf1));
                }
                }
        } else {
                std::cout << "fork error!\n" ;
        }
       
                std::cout << "file is exit!\n" ;
                close(ret);
       

       
}



使用特权

评论回复

相关帖子

沙发
keer_zu|  楼主 | 2022-9-26 13:57 | 只看该作者
运行结果:


使用特权

评论回复
板凳
keer_zu|  楼主 | 2022-9-26 14:43 | 只看该作者
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

1349

主题

12426

帖子

53

粉丝