我可以在这段代码上使用一组眼睛(或更多).我正在尝试从文件流(f1)到数组/缓冲区读取一定量的字节(文件是文本文件,数组是char类型).如果我读入大小"buffer - 1",我想"重新分配"数组并继续读取,从我离开的地方开始.基本上我正在尝试为未知大小的文件动态扩展缓冲区.我想知道的是:
这是片段:
//read_buffer is of size buff_size
n_read = read(f1, read_buffer, buff_size - 1);
read_count = n_read;
int new_size = buff_size;
while (read_count == (buff_size - 1))
{
new_size *= 2;
read_buffer = realloc(read_buffer, new_size);
n_read = read(f1, read_buffer[read_count], buff_size - 1);
read_count += n_read;
}
Run Code Online (Sandbox Code Playgroud)
当我正在学习如何进行这种类型的动态读取时,我想知道是否有人可以通过这类事情陈述一些关于最佳实践的简要事实.我假设这在专业领域出现了TON(阅读未知大小的文件)?谢谢你的时间.另外:当你们找到好的做事方式(即针对这类问题的技巧)时,你是否发现自己记忆如何做到这一点,或者将其保存以供将来参考(即解决方案是否相当静态)?
如果你打算扩展整个文件的缓冲区,最简单的方法就是找到最后的,得到当前的偏移,然后回到开头并读取:
size = lseek(f1, 0, SEEK_END); // get offset at end of file
lseek(f1, 0, SEEK_SET); // seek back to beginning
buffer = malloc(size+1); // allocate enough memory.
read(f1, buffer, size); // read in the file
Run Code Online (Sandbox Code Playgroud)
或者,在任何合理的现代POSIX类系统上,考虑使用mmap.