簡要說明(這部分是開源作業系統的知識點與嵌入式合併的):
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也要快上許多。在某些時...