实现mypwd
任務(wù)詳情
關(guān)于pwd命令
- 一般情況下不帶任何參數(shù)
- -L:顯示當前的路徑,有連接文件時,直接顯示連接文件的路徑,(不加參數(shù)時默認此方式)。
- -p:顯示當前的路徑,有連接文件時,不使用連接路徑,直接顯示連接文件所指向的文件;當包含多層連接文件時,顯示連接文件最終指向的文件。
- --help:顯示幫助信息。
- --version:顯示版本信息。
- man pwd
- 查看相關(guān)系統(tǒng)調(diào)用函數(shù)信息:man -k dir | grep 2
- getcwd():getcwd(char *buf,size_t size)
- 將當前工作目錄的絕對路徑復(fù)制到參數(shù)buffer所指的內(nèi)存空間中,參數(shù)size為buf的空間大小
- readdir():readdir(DIR* dir)返回參數(shù)dir 目錄流的下個目錄進入點
- 需要搭配opendir()使用:opendir (const char * path )獲取path子目錄下的所由文件和目錄的列表,如果path是個文件則返回值為NULL
- 對于它的實現(xiàn),我們首先要知道,目錄在Linux中其實也是一種文件,所以它也是由inode+數(shù)據(jù)塊構(gòu)成的,每一個列表記錄inode-number+filename
- chdir():int chdir(const char *path )用于改變當前工作目錄,調(diào)用參數(shù)是指向目錄的指針,調(diào)用進程需要有搜索整個目錄的權(quán)限。
- getcwd():getcwd(char *buf,size_t size)
偽代碼實現(xiàn)
- 通過上面我們可以發(fā)現(xiàn)可以通過兩種函數(shù)來實現(xiàn)pwd命令
- 對getcwd():
定義一個緩沖區(qū)數(shù)組buf[MAXPATH]; 調(diào)用getcwd(buf, MAXPATH); 輸出返回值即為路經(jīng); - 對readdir():
1. 通過特殊的文件名"."獲取當前目錄的inode-number(假設(shè)當前目錄為a) 2. 通過特殊的文件名".."獲取當前目錄的父級目錄的inode-number 3. 判斷當前目錄和上級目錄的inode-number是否一樣 4. 如果兩個inode-number一樣說明達到根目錄,輸出完整路徑,退出程序 5. 如果兩個inode-number不一樣,切換至父級目錄,根據(jù)步驟1獲取的inode-number,在父級目錄中搜索對應(yīng)的文件名并記錄下來,然后重新回到步驟1
代碼實現(xiàn)
getcwd()
readdir()
實現(xiàn)截圖
- getcwd():
- readdir():
轉(zhuǎn)載于:https://www.cnblogs.com/besty-zyx/p/10014441.html
總結(jié)
- 上一篇: 1960 范德蒙矩阵(数学贪心)
- 下一篇: vs2015+opencv+qt打包ex