小虎随笔 2021-05-19 21:42 采纳率: 50%
浏览 10

有名管道的一个小例子,但就是跑不通,请问下是怎么回事

在已经存在fifo1234文件的情况西,但是open的fd是-1,write和read的返回值都是-1,请问下大佬是怎么回事,谢谢?

 

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <wait.h>
int main(){
        int pid = fork();
        if(pid > 0){
        int fd = open("fifo1234", O_RDWR);
        printf("%d\n", fd);
        char x[100] = "hello world";
        int wo = write(fd, x, sizeof(x));
        printf("[%d]\n", wo);
        close(fd);
        }

        if(pid == 0)
        {

        int fd = open("fifo1234", O_RDONLY);
        char recv[100]={0};
        int ro = read(fd, recv, sizeof(recv));
        printf("[%d]\n",ro);
        printf("%s", recv);
        close(fd);
        }
        return 0;
}


 

  • 写回答

1条回答 默认 最新

  • fortunely2 2023-05-19 15:05
    关注

    你的open就有问题。
    不能以O_RDWR(读、写)模式打开FIFO文件,O_RDWR模式打开FIFO文件行为未定义。
    使用FIFO文件的方法是:一个进程以只读模式(O_RDONLY)打开FIFO文件,另一个进程以只写模式(O_WRONLY)打开FIFO文件。负责写入FIFO的进程的写入内容,就可以被负责读出FIFO的进程读取到,从而实现通信的目的。

    建议你看看我写这片文章:

    评论 编辑记录

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀