日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

实现mypwd

發布時間:2023/12/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实现mypwd 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

任務詳情

  • 學習pwd命令
  • 研究pwd實現需要的系統調用(man -k; grep),寫出偽代碼
  • 實現mypwd
  • 測試mypwd
  • 關于pwd命令

  • 命令功能:查看”當前工作目錄“的絕對路徑
  • 參數:
    • 一般情況下不帶任何參數
    • -L:顯示當前的路徑,有連接文件時,直接顯示連接文件的路徑,(不加參數時默認此方式)。
    • -p:顯示當前的路徑,有連接文件時,不使用連接路徑,直接顯示連接文件所指向的文件;當包含多層連接文件時,顯示連接文件最終指向的文件。
    • --help:顯示幫助信息。
    • --version:顯示版本信息。
  • Linux下pwd
    • 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 )用于改變當前工作目錄,調用參數是指向目錄的指針,調用進程需要有搜索整個目錄的權限。

    偽代碼實現

    • 通過上面我們可以發現可以通過兩種函數來實現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

    總結

    以上是生活随笔為你收集整理的实现mypwd的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。