檔案系統核心儲存引擎 實現 一

2021-10-07 04:54:36 字數 3425 閱讀 3935

#ifndef qiniu_largefile_mmapfile_h_

#define qiniu_largefile_mmapfile_h_

#include

#include

namespace qiniu

; class mmapfile

;}}#endif

/* */

#include

"mmap_file.h"

#include

#include

"common.h"

static

int debug =1;

namespace qiniu

mmapfile:

:mmapfile

(const

int fd)

:size_(0

),fd_(fd)

,data_

(null

) mmapfile:

:mmapfile

(const mmapoption& mmap_option,

const

int fd)

:size_(0

),fd_(fd)

,data_

(null

)

mmapfile::~

mmapfile()

} bool mmapfile:

:sync_file()

/* 同步檔案 */

return true;

}void

*mmapfile:

:get_data()

const

/* 獲取對映到記憶體的首位址 */

int32_t mmapfile:

:get_size()

const

/* 獲取對映資料的大小 */

bool mmapfile:

:munmap_file()

/* 解除對映 */

else

} bool mmapfile:

:remap_file()

/* 重新執行對映 mremap */

if(size_ == mmap_file_option_.max_mmap_size_)

int32_t new_size = size_ + mmap_file_option_.per_mmap_size_;

if(new_size > mmap_file_option_.max_mmap_size_)if(

!ensure_file_size

(new_size))if

(debug)

void

*new_map_data =

mremap

(data_, size_, new_size, mremap_maymove);if

(map_failed == new_map_data)

else

} data_ = new_map_data;

size_ = new_size;

return true;

} bool mmapfile:

:ensure_file_size

(const int32_t size)

if(s.st_size < size)

}return true;

} bool mmapfile:

:map_file

(const bool write)

/* 將檔案對映到記憶體, 同時設定訪問許可權 */

if(fd_ <0)

if(0== mmap_file_option_.max_mmap_size_)

if(size_ < mmap_file_option_.max_mmap_size_)

elseif(

!ensure_file_size

(size_)

)

data_ =

mmap(0

, size_, flags, map_shared, fd_,0)

;if(map_failed == data_)

if(debug)}}

}

#ifndef _common_h_included_

#define _common_h_included_

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#endif

/* _common_h_included_ */

#include

"common.h"

#include

"mmap_file.h"

using namespace std;

using namespace qiniu;

static

const mode_t open_mode =

0644

;/* mode_t 是無符號整型 */

const

static largefile:

:mmapoption mmap_option =

;/* 記憶體對映的引數 */

intopen_file

(string file_name,

int open_flags)

return fd;

}int

main

(void

) largefile:

:mmapfile *map_file = new largefile:

:mmapfile

(mmap_option, fd)

;map_file

(true);if

else

close

(fd)

;return0;

}

執行結果:

我以為, 上一學期的大一, 就直接到大二了, 學校居然要回校 2020-06-14 號回校, 好吧! 領導叫回只能會校, 大約 7月 xx 日就又回家.

感覺 大一 一下 子快到大二了, 還是趕緊加油學吧! 不然, 畢業就等於失業, 可就完蛋!

下節繼續優化

希望, 給個贊反正你又不虧, 隨便而已.

檔案系統與核心

核心是執行單元,檔案系統是儲存單元 核心以某種方式 某一檔案系統 從nand中讀取所需要的資料進行處理 處理完後再以某種方式 某一檔案系統 儲存到nand中 這句話很簡單 可我是理解了好幾天 我原來一直糾結與我在電腦螢幕上看到的各種資料夾 比如核心是存在於 usr src 下,我就一直想著是不是檔案...

liunx核心檔案系統

什麼是檔案系統?常規認知 就是桌面的根目錄 實際上來說檔案系統是作業系統用於明確儲存裝置組織檔案的方法。以上說的方法 就是檔案管理系統 程式 簡稱檔案系統 檔案系統 檔案管理系統的方法 的種類有哪些?fat vfat ntfs ext1 2 3 4 hfs 樹莓派檢視檔案系統的命令 df t vfa...

Irrlicht引擎 檔案系統簡介

整個檔案io系統位於irr io名字空間內,介面簡潔明瞭,見下圖 這個檔案系統的乙個特點是,可以將zip包,pak包 quake2 pak格式 視作目錄,包中的檔案和磁碟目錄的檔案一樣訪問,直接指定檔案路徑即可。在ifilesystem的實現中,createandopenfile的過程是,先遍歷所有...