两个进程之间的fifo通信,有时候出现乱码

发布于 2022-10-15 04:46:38 字数 32 浏览 22 评论 0

两个进程之间的fifo通信,有时候出现乱码,这是那里问题呢???

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

っ左 2022-10-22 04:46:38

回复 1# vdsvs

    你存的是啥样的数据呢? 打印了不该打印的字符?

隔纱相望 2022-10-22 04:46:38

是不是不同步?我一个进程写,另外一个进程读。是不是呢? 需要吗??? 就是我写完后,另外一边能读出数据来,但随后就跟随几个乱码。需要考虑同步的问题?

绝情姑娘 2022-10-22 04:46:38

程序如下:void write_fifo(int argc, char *argv[])
{
        int fd;
        char w_buf[1024];
        int nwrite;

        if(fd==-1)
                if(errno==ENXIO)
                        printf("open error; no reading process\n");
        fd=open(FIFO_SERVER,O_WRONLY|O_NONBLOCK,0);
        if(argc==1)
                printf("Please send something\n");
        strcpy(w_buf,argv[1]);
        if((nwrite=write(fd,w_buf,1024))==-1)
        {
                if(errno==EAGAIN)
                        printf("The FIFO has not been read yet.Please try later\n");
        }
        else
                printf("write %s to the FIFO\n",w_buf);

}

//---------------------------------------------------------------------------------------------------------
int readfifo()
{
        char buf_r[100];
        int  fd;
        int  nread;

        if((mkfifo(FIFO,O_CREAT|O_EXCL)<0)&&(errno!=EEXIST))
                printf("cannot create fifoserver\n");
        printf("Preparing for reading bytes...\n");

        memset(buf_r,0,sizeof(buf_r));
        fd=open(FIFO,O_RDONLY|O_NONBLOCK,0);
        if(fd==-1)
        {
                perror("open");
                exit(1);
        }
        while(1)
        {
                memset(buf_r,0,sizeof(buf_r));

                if((nread=read(fd,buf_r,100))==-1){
                        if(errno==EAGAIN)
                                printf("no data yet\n");
                }
                printf("read %s from FIFO\n",buf_r);
                memset(buf_r,0,sizeof(buf_r));
                sleep(1);
        }
        pause();
        unlink(FIFO);
}

这是典型的程序,需要考虑同步问题吗???

走走停停 2022-10-22 04:46:38

我操作过程如下:
我执行写:write  212112121  to fifo

执行读:
read  from FIFO
read  from FIFO
read  from FIFO
read 212112121 from FIFO
read  from FIFO
read  from FIFO
read  from FIFO
read  from FIFO
from FIFO
read “ from FIFO
read  from FIFO
read  from FIFO
read x‰ @ÎØðMÚ¢H+ÎØðM from FIFO
read  from FIFO
no data yet
read  from FIFO

就是上面读到数据后紧跟着就是乱码,是那里问题呢???

单身狗的梦 2022-10-22 04:46:38

两个进程读写这个管道应该不会有同步问题。

其实问题不大~~

在 strcpy(w_buf,argv[1]);前 加上一句话就应该没有问题了

memset(w_buf,'\0',sizeof(w_buf)); 原来谁知道w_buf 里面存的什么东西!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文