我在程序中对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