gpt4 book ai didi

c - 将管道的读取端重定向到文件描述符

转载 作者:行者123 更新时间:2023-11-30 14:40:28 29 4
gpt4 key购买 nike

我有两个子进程,它们共享父进程的公共(public)管道描述符。关闭端等没有问题。问题是我希望将管道的读取端重定向到文件描述符,而不是保存缓冲区并将缓冲区的内容写入文件。是否可以?我的代码片段如下

// we're sure we can read from fd[0], I did it sucessfully
// I mean there is no problem about the communication

int open_fd = open(filename, O_WRONLY|O_CREAT, 0666);
if (dup2(open_fd,fd[0]) == -1) {
perror("error ");
return 1;
}
if (close(open_fd) == -1) {
perror("close error");
return 1;
}

当我执行上述代码时,我没有写入名为filename的文件。顺便问一下,是否需要通过调用close(open_fd)来关闭open_fd?因为 dup2 已经关闭了它。

最佳答案

您可能误解了dup2的用途。它只是更改文件描述符的“含义”,以便它现在“指向”与其他描述符相同的流。但它不会以任何方式将数据从一个文件描述符传输到另一个文件描述符。要真正实现你想要的,你可以尝试 splice :

int open_fd = open(filename, O_WRONLY|O_CREAT, 0666);
splice(fd[0], NULL, open_fd, NULL, size, 0);

请注意,您必须指定要传输的数据量(上例中的 size 变量)。

关于c - 将管道的读取端重定向到文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55539301/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com