儲存對映io
說明:在程序的棧中開闢一塊緩衝區將之與磁碟檔案相對應,對緩衝區的更改將自動寫入磁碟檔案,這樣就可以不在使用read和write的情況下執行io
mmap函式
void* mmap(void* addr, size_t len, int prot, int flag, int filedes, off_t off )
將filedes指向的檔案對映到儲存區
返回值:對映後的儲存區起始位址(需將addr指定為0)
addr: 指定儲存區的起始位址.通常設定為0,表示由系統選擇對映儲存區.
filedes:要對映的檔案描述符
prot:對對映儲存區的保護要求
prot_read 對映區可讀
prot_write 對映區可寫
prot_exec 對映區可執行
prot_none 對映區不可訪問
flag:
map_fixed 返回值必須等於addr
map_shared 對儲存區的更改會對檔案造成修改
map_private 儲存區的更改以及之後的操作都是對對映檔案副本的修改,不影響原檔案
mprotect函式
修改存在的對映儲存區的許可權
int mprotect( void* addr, size_t len, int prot )
msync函式
將更改後儲存區頁寫回檔案
int msync( void *addr, size_t len, int prot )
munmap函式
解除儲存對映
int munmap( caddr_t addr, size_t len )
io多路轉接
構造一張有關描述符的列表,然後呼叫select函式,當乙個或多個io準備好時select返回
int select( int maxfdp1,fd_set * readfds , fd_set* writefds, fd_set* exceptfds, struct timeval* tvptr )
maxfdp1:最大描述符+1,即描述符個數
readfds,writefds,exceptfds:關心的可讀,可寫和處於異常條件的各個描述符.
tvptr:願意等待的事件
== null:永遠等待
tvptr->tv-sec==0 && tvptr->tv_usec==0:完全不等待
tvptr->tv-sec!=0 || tvptr->tv_usec!=0:等待制定時間
磁碟IO 快取IO 直接IO 記憶體對映
磁碟io的幾種訪問方式如下 快取io 快取i o又被稱作標準i o,大多數檔案系統的預設i o操作都是快取i o。在linux的快取i o機制中,資料先從磁碟複製到核心空間的緩衝區,然後從核心空間緩衝區複製到應用程式的位址空間。讀操作 作業系統檢查核心的緩衝區有沒有需要的資料,如果已經快取了,那麼就...
磁碟IO 快取IO與直接IO
檔案系統io分為directio和bufferio,其中bufferio也叫normal io。快取i o又被稱作標準i o,大多數檔案系統的預設i o操作都是快取i o。在linux的快取i o機制中,資料先從磁碟複製到核心空間的緩衝區,然後從核心空間緩衝區複製到應用程式的位址空間。讀操作 作業系...
Linux的記憶體I O對映
記憶體的i o對映是將檔案某區域的內容對映到程序的虛擬空間的技術 通過對檔案的記憶體io對映,可使用使用者對檔案的操作轉換為對記憶體的操作,這樣不僅使用方便而且提高了儲存速度。void mmap void addr,size t length,int prot,int flags,int fd,of...