小虎随笔 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的进程读取到,从而实现通信的目的。

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

    评论 编辑记录

报告相同问题?

悬赏问题

  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥15 对于这个问题的算法代码
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题