O DIRECT方式讀取檔案示例

2021-06-21 20:21:48 字數 1550 閱讀 2899

#include #include #include #include #include #include #include #include #include // 讀檔案類

class cfilereader

~cfilereader()

bool open(const char* filepath)

// 取得檔案大小,以便一次性將檔案讀取出來

struct stat st;

if (-1 == fstat(fd, &st))

// 分配足以容納整個檔案的buffer

// 由於以o_direct方式讀取,所以需要按頁對齊

size_t size = st.st_size + (getpagesize() - st.st_size%getpagesize());

posix_memalign((void**)&_buffer, getpagesize(), size);

if (null == _buffer)

// 將整個檔案讀取_buffer中

int bytes_read = read(fd, _buffer, size);

if (-1 == bytes_read)

else if (bytes_read != size)

return true;

} // 從檔案中讀取乙個節點資料

// offset:偏移量

// return:返回指向記錄的指標

template const p* get_record(uint64_t offset) const

// 取得檔案所有的記錄

template const p** get_all_record() const

private:

char* _buffer;

};// 用於計時

class timewatcher

~timewatcher()

private:

std::string _tip;

time_t _now_msec;

};struct user

;// 用於生成測試檔案

bool make_test_file(const char* filepath, int num_records)

user user;

timewatcher time_watcher("write");

for (int i=0; i(index[i]); }}

// 執行測試

void test()

} random_read(file_reader1, 1000000);

random_read(file_reader1, 3000000);

cfilereader file_reader2;

}random_read(file_reader2, 1000000);

random_read(file_reader2, 3000000); }}

int main(int argc, char* argv)

檔案讀取方式

過程 1.開啟檔案 2.讀資料 3.關閉檔案 1,w 寫模式,它是不能讀的,如果用w模式開啟乙個已經存在的檔案,會清空以前的檔案內容,重新寫 w 是讀寫內容,只要沾上w,肯定會清空原來的檔案 2,r 讀模式,只能讀,不能寫,而且檔案必須存在 r 是讀寫模式,只要沾上r,檔案必須存在 3,a 追加模式...

ByteArray 示例 讀取 zip 檔案

原文 本示例中所編寫的 僅用於分析不包含資料夾且不需要資料描述符記錄的 zip 檔案。它將忽略最後乙個檔案的資料後面的所有資訊。每個檔案的檔案標頭的格式如下 檔案標頭簽名 4 位元組 所需版本 2 位元組 一般用途位標記 2 位元組 壓縮方法 2 位元組 8 deflate 0 uncompress...

PHPExcel讀取excel檔案示例

author xiaoqiang.wu version 1.01 error reporting e all date default timezone set asia shanghai phpexcel iofactory require once classes phpexcel iofact...