是否可以读取小于缓冲区大小的文件中剩余的字节?
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 无法处理小于缓冲区大小的最后部分字节,我该怎么办?
是的,改变你的参数。
size您应该请求size1 个字节的块,而不是请求一个字节块。然后该函数将返回它能够读取多少块(字节):
int nread;
while( 0 < (nread = fread(buffer, 1, size, fp)) ) ...
Run Code Online (Sandbox Code Playgroud)