gpt4 book ai didi

C 在不使用缓冲区的情况下流式传输 : Copy data from one stream to another directly,

转载 作者:IT王子 更新时间:2023-10-29 00:31:36 25 4
gpt4 key购买 nike

我想将数据从一个流复制到另一个流。现在通常,我会这样做:

n = fread(buffer, 1, bufsize, fin);
fwrite(buffer, 1, n, fout);

有没有一种方法可以将数据直接从 fin 写入 fout,而不需要经过缓冲区,即代替 fin->buffer->fout ,我想直接做fin->fout(没有缓冲)。

在 ANSI C 中可以这样做吗?如果没有,是否可以使用 POSIX 函数来实现?还是特定于 Linux 的解决方案?

最佳答案

2 个可能的仅限 Linux 的解决方案是 splice()sendfile() .他们所做的是在不离开内核空间的情况下复制数据,从而实现潜在的显着性能优化。

请注意两者都有限制:

  • sendfile() 2.6.33之前的Linux内核需要socket输出,之后可以输出任何文件,而且要求输入支持mmap()操作,也就是说输入不能是 stdin 或管道。

  • splice()要求输入或输出流之一是管道(不确定两者),并且对于内核版本 2.6.30.10 和更早版本,它要求不是管道的流的文件系统支持拼接。

编辑:注意 some filesystems might not support splicing for Linux 2.6.30.10 and below .

关于C 在不使用缓冲区的情况下流式传输 : Copy data from one stream to another directly,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21014880/

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