C fopen是否将整个文件读入内存?

时间:2019-04-05 09:57:58

标签: c fopen

我想知道fopen命令是否足够聪明以至于如果文件太大就停止读取文件,然后等待一些继续的读取命令以继续读取。

就此而言,_iobuf有多大?

3 个答案:

答案 0 :(得分:3)

fopen(...)不进行任何大小检查;它只是返回一个文件指针。您是否有机会想到fread(...)

您始终可以使用stat(...)系统调用找到要读取的文件的大小。

答案 1 :(得分:2)

根据C标准,setbuf() / setvbuf()应该在fopen()之后和其他任何东西之前被调用。这些为新打开的文件设置缓冲模式和缓冲区大小。这意味着至少在C级别fopen()不会从它打开的文件中读取任何内容。

但是,操作系统中的基础文件系统实现可能会提前读取到文件缓存中,但这显然没有在语言标准中定义。您需要在OS文档中或通过实验找到它。

_iobuf在C标准中未定义。尽管我可能会“猜测”它是什么,但您不必担心它(它不包含固定大小的C文件缓冲区,而是包含一对值:指向缓冲区的指针和缓冲区大小)

答案 2 :(得分:1)

如果您查看here,将会看到#define BUFSIZ 1024 但这取决于您的fopen lib实现。 AFAIK,没有标准定义。