为什么pipe2()为管道的读端返回文件描述符0(STDIN)?

时间:2018-04-18 04:31:34

标签: c++ unix pipe posix named-pipes

我在程序中对pipe2(int fd [2],int flags)进行了标准调用。

https://linux.die.net/man/2/pipe

读取和写入管道按预期工作。 pipe2()返回0,并且不设置 errno 。但是,fd [0]总是被设置为0,据我所知,这是为 STDIN 文件描述符保留的。

我在这里做错了什么?

int open_shared_fifo(hpipe_t *pipe_handle) {
    int pipefd[2];
    int res = pipe2(pipefd, O_DIRECT);
    if (res == 0) {
        std::cout << "created pipe" << std::endl;
        /* populate handle */
        pipe_handle->pipewr = pipefd[1];
        pipe_handle->piperd = pipefd[0]; // THIS IS ALWAYS GETS SET TO 0
        return 0;
    } else {
        std::cout << "failed to create a pipe" << std::endl;
        return -1;
    }
}

编辑:重要的是要提到我没有关闭之前程序中的任何文件描述符,所以0仍然是100%肯定(或应该是)STDIN

0 个答案:

没有答案