c - FIFO 管道返回 0 而不是正确的整数



我正在尝试实现两个进程之间的基本通信。我打算让每个进程接收一条信息,然后传输回一条。我是管道的新手,所以使用以下代码示例尝试了这一点:如何使用管道在两个程序之间发送一个简单的字符串?

设置了代码,它工作正常,然后我复制了第二个管道的代码以接收另一个整数。但是我的第二个管道不传输整数,程序接收 0。

程序1.c:

#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#define MAX_BUF 1024
int main()
{
    int fd; // file descriptor
    int fd_b;
    int data = 5;
    int buf; // buffer from fifo
    char * fifo_one = "/tmp/fifo_one";
    char * fifo_two = "/tmp/fifo_two";
    // create fifo
    mkfifo(fifo_one, 0666);
    // write to FIFO
    fd = open(fifo_one, O_WRONLY);
    write(fd, &data, sizeof(&data));
    close(fd);
    // remove FIFO
    unlink(fifo_one);
    // receive from FIFO
    fd_b = open(fifo_two, O_RDONLY);
    read(fd_b, &buf, MAX_BUF);
    printf("Received: %dn", buf);
    close(fd_b);
    return 0;
}

程序2.c:

#include <fcntl.h>
#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>
#define MAX_BUF 1024
int main()
{
    int fd; // file descriptor
    int fd_b;
    char * fifo_one = "/tmp/fifo_one";
    char * fifo_two = "/tmp/fifo_two";
    int buf; // buffer from fifo
    int ret_dat; // return data
    // receive data from fifo
    fd = open(fifo_one, O_RDONLY);
    read(fd, &buf, MAX_BUF);
    printf("Received: %dn", buf);
    close(fd);
    // decide return
    if (buf == 5) {
        ret_dat = 10;
    }
    // send data back
    // create fifo
    mkfifo(fifo_two, 0666);
    // write to FIFO
    fd_b = open(fifo_two, O_WRONLY);
    write(fd_b, &ret_dat, sizeof(&ret_dat));
    close(fd_b);
    // remove FIFO
    unlink(fifo_sendBal);
    return 0;
}

第二个程序收到 5,但没有成功发回 10,

我知道时间会影响IPC,所以我在某些事件后尝试使用睡眠,但我无法让它工作。

第二个程序收到 5,但没有成功发回 10 ? 通过调用mkfifo()创建的FIFO进程间通信的属性是,两个进程都应该处于活动状态以相互通信。来自 mkfifo 的手册页

以这种方式创建FIFO特殊文件后,任何进程 可以打开它进行阅读或写作,就像普通人一样 文件。但是,它必须在两端同时打开之前 您可以继续对其执行任何输入或输出操作。开放 用于读取的 FIFO 通常会阻塞,直到其他进程打开 相同的FIFO用于写入,反之亦然。请参阅非阻塞fifo(7) 处理先进先出特殊文件。

最新更新