因为工作关系,需要从大文件中筛选数据,进行比对。文件大小一般都在6g左右。
读取大文件有如下两种方法,一是用fopen打开文件,fgetline循环读取,fclose关闭文件;二是用open打开函数,用lseek获取文件大小,用mmap大文件内存映射,用munmap关闭内存映射,用close关闭文件句柄。方式一教慢,就不再详细描述。主要描述方式二。
方式二,网上介绍也有很多,但是鲜有介绍当大于4G后,读取方法。用long型读取文件大小时,最多是4294967295个字节,也就是4G。解决方法是用long long来读取文件的大小。
样例代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <errno.h>
#include <unistd.h>
using namespace std;
#include "dlist.h"
//呼叫流程数组
typedef struct s_callflow
{
char identifier[100];
char billingid[200];
bool response;<