linux 高階IO 磁碟對映IO

2021-07-02 07:16:43 字數 1278 閱讀 7175

儲存對映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...