C - 如果缓冲区较大,如何处理文件的最后一部分?

REA*_*EE 4 c io file

是否可以读取小于缓冲区大小的文件中剩余的字节?

char * buffer = (char *)malloc(size);
FILE * fp = fopen(filename, "rb");

while(fread(buffer, size, 1, fp)){
     // do something
}
Run Code Online (Sandbox Code Playgroud)

假设大小为 4,文件大小为 17 字节。我认为 fread 也可以处理最后一个操作,即使文件中剩余的字节小于缓冲区大小,但显然它只是终止 while 循环而不读取最后一个字节。

我尝试使用较低的系统调用 read() 但由于某种原因我无法读取任何字节。

如果 fread 无法处理小于缓冲区大小的最后部分字节,我该怎么办?

pad*_*ddy 5

是的,改变你的参数。

size您应该请求size1 个字节的块,而不是请求一个字节块。然后该函数将返回它能够读取多少块(字节):

int nread;
while( 0 < (nread = fread(buffer, 1, size, fp)) ) ...
Run Code Online (Sandbox Code Playgroud)