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

C fopen是否将整个文件读入内存?,c,fopen,C,Fopen,我想知道,如果文件太大,fopen命令是否足够聪明,可以停止读取文件,然后等待某个读取命令继续读取 就这一点而言,“iobuf”有多大?fopen。。。不做任何尺寸检查;它只返回一个文件指针。你有没有想到弗瑞德…,有没有可能 通过使用系统调用,您总是可以找到要读取的文件的大小。如果查看,您将看到define BUFSIZ 1024 但这取决于您的fopen lib实现。此外,没有标准定义。根据C标准,setbuf/setvbuf应在fopen之后和其他任何内容之前调用。这些设置为新打开的文件设置

我想知道,如果文件太大,fopen命令是否足够聪明,可以停止读取文件,然后等待某个读取命令继续读取

就这一点而言,“iobuf”有多大?

fopen。。。不做任何尺寸检查;它只返回一个文件指针。你有没有想到弗瑞德…,有没有可能

通过使用系统调用,您总是可以找到要读取的文件的大小。

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

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

然而,操作系统中的底层文件系统实现可能会预先读入文件缓存,但语言标准中显然没有定义这一点。您需要在操作系统文档中或通过实验找到这一点


_iobuf未在C标准中定义。虽然我可能猜到了它是什么,但您可能不需要担心它不包含固定大小的C文件缓冲区,而是包含一对值:指向缓冲区的指针和缓冲区大小。

fopen不读取任何数据,它返回使用文件I/O函数(如fread、fgetl、fprintf、,写,看,写。。。fread返回读取的字节数,因此,如果到达文件末尾,该数字将小于请求的字节数。这是一个大问题,简单的答案是fopen正在调用open syscall