我正在使用函数调用fwrite()
将数据写入 Linux 上的管道。
早些时候,fwrite()
被反复调用小块数据(平均 20 个字节)并且缓冲留给fwrite()
. 对进程的 strace 显示一次写入了 4096 字节的数据。
原来,这个编写过程是我程序的瓶颈。所以我决定将代码中的数据缓冲成 64KB 的块,然后使用fwrite()
. 我曾经setvbuf()
将 FILE* 指针设置为“无缓冲”。
性能提升并不像我预期的那么显着。
更重要的是,strace
输出显示数据仍一次写入 4096 字节。有人可以向我解释这种行为吗?如果我fwrite()
用 64KB 的数据调用,为什么一次只写入 4096 字节?
fwrite()
有没有使用 FILE* 指针将数据写入管道的替代方法?