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