今天工作的时候,遇到一个需求,需要分别统计多个小文件(小于 4K)的行数.
分析了一下File这个结构体,想到了一个另类的读文件的办法.
大家都知道,当读取一个文件的时候,其实是操作系统先将文件中的部分内容一次性的载入内存中,再从这个内存读取内容.如果遇到内存中的内容读完了,操作系统会再去将文件中新的内容载入内存,再在这块内存中完成读取操作.
而File这个结构体,包括以下字段:
struct File
{
char *_ptr; //指向当前读取内容的地址
int _cnt; //文件中剩余字节数
char *_base; //文件头在内存中的地址
int _flag; //文件操作的mode
int _file;
int _charbuf;
int _bufsiz; //缓冲区大小
char *_tmpfname;
};
而在vs2008的环境下,bufsiz等于一个页面的大小,也就是4kB。
知道了这些,我们可以利用这个结构体中的指针,来完成文件内容的读取了。当然,只是限于小文件。