【发布时间】:2012-05-05 20:57:36
【问题描述】:
我正在使用函数调用fwrite() 将数据写入 Linux 上的管道。
之前,fwrite() 被反复调用以获取小块数据(平均 20 字节),而缓冲留给了fwrite()。对进程的 strace 显示一次写入了 4096 字节的数据。
原来这个编写过程是我程序的瓶颈。所以我决定将代码中的数据缓冲成 64KB 的块,然后使用fwrite() 一次写入整个块。我使用setvbuf() 将 FILE* 指针设置为“无缓冲”。
性能提升没有我预期的那么显着。
更重要的是,strace 输出显示数据仍一次写入 4096 个字节。有人可以向我解释这种行为吗?如果我用 64KB 的数据调用 fwrite(),为什么它一次只写入 4096 个字节?
是否有替代fwrite() 使用 FILE* 指针将数据写入管道的方法?
【问题讨论】:
-
@Shailesh_Tainwala:您可能正在用 C++ 编写代码,但这是一个 C 问题,而不是 C++。
fwrite()是一个 c 函数,而不是 c++ 函数。我在您的问题中添加了一个 c 标签,这样您就可以获得更广泛的受众。