Linux之目錄操作和記憶體對映

2021-10-05 15:37:55 字數 2273 閱讀 9810

簡要說明(這部分是開源作業系統的知識點與嵌入式合併的):

1)目錄

目錄是指包含許多檔案專案的一類特殊檔案。子目錄、父目錄、工作目錄、使用者主目錄(home directory)。

2)路徑

由目錄名和 「/」(斜槓)做分隔符組成的字串,用來表示檔案或目錄在檔案系統中所處的層次的一種方法。路徑又分絕對路徑和相對路徑。

3)「.」表示當前目錄,「. .」表示父目錄,「~」表示使用者主目錄。

#include

char

*getcwd

(char

* buf, size_t size)

;

函式getcwd把當前目錄的絕對路徑名複製到buf中,該緩衝有size個字長,如果裝不下完整路徑,則返回null。

linux命令中可以使用pwd檢視當前目錄,系統程式設計中可以通過getcwd獲取當前目錄。

#include

intchdir

(const

char

* path)

;

chdir用來將當前的工作目錄改變成以引數path所指的目錄。執行成功則返回0,失敗返回-1,errno為錯誤**。

#include

#include

intmkdir

(const

char

* path,mode_t mode)

;int

rmdir

(const

char

* path)

;

執行成功返回0,否則返回-1並設定errno。

#include

dir*

opendir

(const

char

* path)

;

開啟引數path指定的目錄,並返回dir*形態的目錄流,和fopen類似,接下來對目錄的讀取和搜尋都要使用此返回值。

readdir執行成功則返回指向dirent結構的指標,以後每次呼叫都用新的目錄項來替換dirent結構。如果有錯誤發生或讀取到目錄檔案尾則返回null。

#include

#include

struct dirent*

readdir

(dir* dir)

;

dirent目錄結構

struct dirent

;

#include

#include

intclosedir

(dir *dir)

;

mmap函式用來建立乙個磁碟檔案的記憶體對映,返回此記憶體首位址的指標。

#include

#include

void

*mmap

(void start,size_t length,

int prot,

int flags,

int fd,off_t offset)

;

start:指向欲對應的記憶體起始位址,通常設為null,代表讓系統自動選定位址,對應成功後該位址會返回。

length:將檔案中多大的部分對映到記憶體。

prot:對映區域的保護方式,有下列組合:

prot_exec對映區域可被執行

prot_read對映區域可被讀取

prot_write對映區域可被寫入

prot_none對映區域不能訪問

flags:影響對映區域的各種特性:

map_shared:對對映區域的寫入資料會複製回檔案,且允許其他對映該檔案的程序共享。

map_private:對對映區域的寫入操作會產生乙個對映檔案的複製,對此區域作的任何修改都不會協會原來的檔案內容。

fd:為open()返回的檔案描述符,代表欲對映到記憶體的檔案,返回為整型。

offset:引數offset為檔案對映的偏移量,通常設定為0,代表從檔案最前方開始對應,offset必須是分頁大小的整數倍。

對應的是munmap函式,是用來取消引數start所指的對映記憶體起始位址,length是欲取消的記憶體大小。

#include

#include

intmunmap

(void start,size_t length)

;

Python 檔案操作 和 目錄操作

我們知道,檔名 目錄名和鏈結名都是用乙個字串作為其識別符號的,但是給我們乙個識別符號,我們該如何確定它所指的到底是常規檔案檔名 目錄名還是鏈結名呢?這時,我們可以使用os.path模組提供的isfile函式 isdir函式和islink函式來達成我們的目標,如下所示 print myfile,是乙個...

Linux的記憶體對映之mmap

共享記憶體可以說是最有用的程序間通訊方式,也是最快的ipc形式,因為程序可以直接讀寫記憶體,而不需要任何資料的拷貝。對於像管道和訊息佇列等通訊方式,則需要在核心和使用者空間進行四次的資料拷貝,而共享記憶體則只拷貝兩次資料 一次從輸入檔案到共享記憶體區,另一次從共享記憶體區到輸出檔案。實際上,程序之間...

Linux記憶體對映

使用記憶體對映處理大檔案很方便,在windows系統中,實現了這樣的藉口。在linux中我們也可以通過mmap函式來實現。以下內容完全參考自 如有冒犯,請諒解 mmap函式實現把乙個檔案對映到乙個記憶體區域,從而我們可以像讀寫記憶體一樣讀寫檔案,他比單純呼叫read write也要快上許多。在某些時...