Rob*_*y75 7 c linux posix stream
我想将数据从一个流复制到另一个流.现在通常,我会这样做:
n = fread(buffer, 1, bufsize, fin);
fwrite(buffer, 1, n, fout);
Run Code Online (Sandbox Code Playgroud)
有没有直接将数据从写一个办法fin来fout,没有经过缓冲准备,即代替fin->buffer->fout,我想直接做fin->fout(无缓冲).
是否可以在ANSI C中这样做?如果没有,是否可以使用POSIX功能?或者特定于Linux的解决方案?
2种可能的Linux解决方案是splice()和sendfile().他们所做的是复制数据而不留下内核空间,从而进行潜在的重要性能优化.
请注意,两者都有局限性:
sendfile()在2.6.33之前需要一个套接字用于Linux内核的输出,之后,任何文件都可以作为输出,并且它还需要输入来支持mmap()操作,这意味着输入不能是stdin管道.
splice()要求输入或输出流之一是管道(不确定两者),对于内核版本2.6.30.10及更早版本,它需要不是管道的流的文件系统来支持拼接.
编辑:请注意,某些文件系统可能不支持Linux 2.6.30.10及更低版本的拼接.
| 归档时间: |
|
| 查看次数: |
1887 次 |
| 最近记录: |