C 我应该在什么时候使用open/read/write和fopen/fread/write

C 我应该在什么时候使用open/read/write和fopen/fread/write,c,linux,io,C,Linux,Io,open/read/write是低级I/O函数,如果速度是我首先关心的问题,那么如何在open/read/write和fopen/fread/fwrite之间进行选择?高级函数也为您提供了易用性,像fopen()这样的函数为您提供了内置I/O缓冲,而不像open()。I/O缓冲确保fopen()比open()快得多 除了上述区别之外,如果您只有文件描述符,则应使用读取、写入等,而如果您有文件*,则应使用fread、fwrite等函数。更高级别的函数也为您提供了易于使用的功能,如fopen()为您

open/read/write是低级I/O函数,如果速度是我首先关心的问题,那么如何在open/read/write和fopen/fread/fwrite之间进行选择?

高级函数也为您提供了易用性,像
fopen()
这样的函数为您提供了内置I/O缓冲,而不像
open()
。I/O缓冲确保
fopen()
open()
快得多


除了上述区别之外,如果您只有文件描述符,则应使用读取、写入等,而如果您有
文件*
,则应使用
fread
fwrite
等函数。

更高级别的函数也为您提供了易于使用的功能,如
fopen()
为您提供内置I/O缓冲,这与
open()
不同。I/O缓冲确保
fopen()
open()
快得多


除了上述区别之外,如果您只有文件描述符,则应使用读、写等,而如果您有
文件*
,则应使用
fread
fwrite
等函数。

请考虑stdio函数调用底层操作系统函数来完成其工作。。。如果您认为可以编写比C标准库更好的代码,请随意编写。@Greg Hewgill如果我想使其比fopen/fread/fwrite更快,那么实现我自己的I/O函数有什么建议吗?这完全取决于应用程序的文件访问模式。如果按顺序读取,则需要一个大的缓冲区。如果你正在四处寻找,你可能想要使用异步I/O。如果你想要另一个非常快的选择,考虑内存映射文件。@ greg Hewgill,谢谢,我想我要做一个基准测试,首先考虑STDIO函数调用底层OS函数来完成它们的工作。如果您认为可以编写比C标准库更好的代码,请随意编写。@Greg Hewgill如果我想使其比fopen/fread/fwrite更快,那么实现我自己的I/O函数有什么建议吗?这完全取决于应用程序的文件访问模式。如果按顺序读取,则需要一个大的缓冲区。如果你正在四处寻找,你可能想要使用异步I/O。如果你想要另一个非常快的替代方案,考虑内存映射文件。@ greg Hewgill,谢谢,我想我会先做一个基准测试,但是在不同的条件下哪个更快呢?@ MickeyShine:也许你应该创建一个基准来找出。如果性能是您关心的问题,您以后将需要这些基准测试工具。@MickeyShine:您应该按照Greg的建议来回答您的问题,通常,如果您正在执行大量seek操作,I/O缓冲就是性能下降,如果您按顺序读取或写入文件,I/O缓冲有助于提高性能。@谢谢您的回答,您的意思是直接I/O函数(打开/读取/写入)更适用于随机(大量搜索)操作,而缓冲I/O(打开/读取/写入)更适用于顺序操作,对吗?但是,在不同的条件下,哪个更快?@MickeyShine:也许你应该创建一个基准来找出答案。如果性能是您关心的问题,您以后将需要这些基准测试工具。@MickeyShine:您应该按照Greg的建议来回答您的问题,通常,如果您正在执行大量seek操作,I/O缓冲就是性能下降,如果您按顺序读取或写入文件,I/O缓冲有助于提高性能。@谢谢您的回答,您的意思是直接I/O函数(打开/读取/写入)更适用于随机(大量寻道)操作,而缓冲I/O(打开/读取/写入)更适用于顺序操作,对吗?