在 Linux 環(huán)境下模擬實(shí)現(xiàn)命令解釋器
訪問(wèn)【W(wǎng)RITE-BUG數(shù)字空間】_[內(nèi)附完整源碼和文檔]
操作系統(tǒng)大作業(yè) Linux 命令行,在 Linux 環(huán)境下模擬實(shí)現(xiàn)命令解釋器。在指定的一個(gè)目錄及其子目錄中查找指定的文件和目錄,并輸出查找到的文件和目錄的絕對(duì)路徑,并指明是文件還是目錄。詳細(xì)設(shè)計(jì)見(jiàn)md文件。
一.程序概述
1.完成的任務(wù):
1)顯示當(dāng)前所在目錄的路徑名;
2)列出指定目錄中所有的目錄和文件;
3)改變當(dāng)前工作目錄;
4)新建一個(gè)目錄即新建一個(gè)文件夾;
5)刪除一個(gè)目錄即刪除一個(gè)文件夾;
6)退出命令解釋程序;
7)重命名一個(gè)文件或目錄;
8)復(fù)制已經(jīng)存在的目錄;
9)在指定的一個(gè)目錄及其子目錄中查找指定的文件和目錄,并輸出查找到的文件和目錄的絕對(duì)路徑,并指明是文件還是目錄。
2.遇到的困難及解決的問(wèn)題
1)一開(kāi)始不知道用什么方式在不用 system()的情況下完成這個(gè)命令解釋程序,后來(lái)看到了要求里面的函數(shù)也不知道用來(lái)干嘛,所以就去拿每一個(gè)函數(shù)去百度,知道它們分別用在哪里;
2)關(guān)于列出指定目錄中所有的目錄和文件這個(gè)功能,不知道用什么方式遍歷目錄中的所有節(jié)點(diǎn),后來(lái),通過(guò)查詢 opendir()、readdir()、closedir()的用法解決了這個(gè)難題;
3)在實(shí)現(xiàn)復(fù)制功能時(shí),關(guān)于復(fù)制整個(gè)目錄的內(nèi)容到另一個(gè)目錄下的這個(gè)功能不知道如何實(shí)現(xiàn),遞歸但是不知道如何定位所復(fù)制目錄中的文件;
4)關(guān)于查找文件的功能,使用了 ftw()函數(shù)的回調(diào),實(shí)現(xiàn)了對(duì)指定目錄的遍歷,并且通過(guò)判斷實(shí)現(xiàn)待查找文件的匹配。
5)在復(fù)制文件時(shí)出現(xiàn)文件權(quán)限不足、復(fù)制出來(lái)的文件無(wú)法正常打開(kāi)的情況,經(jīng)過(guò)多次嘗試,發(fā)現(xiàn)是在創(chuàng)建文件的時(shí)候沒(méi)有把權(quán)限設(shè)置完整,在完整之后就解決了這個(gè)問(wèn)題。
二.概念原理
1.目錄:為了方便對(duì)存儲(chǔ)介質(zhì)中的文件的管理而產(chǎn)生的一種索引結(jié)構(gòu),可以理解為目錄中包含有另外的目錄和文件。
2.路徑:說(shuō)明一個(gè)文件或者一個(gè)子目錄在整個(gè)目錄系統(tǒng)中的位置,用于定位一個(gè)文件或者子目錄,包括絕對(duì)路徑和相對(duì)路徑兩中方式。
3.文件:文件是指存儲(chǔ)在存儲(chǔ)介質(zhì)中的一段特定格式的數(shù)據(jù)資料。
4.目錄流:對(duì)一個(gè)目錄中的每個(gè)項(xiàng)進(jìn)行讀取的方式,是目錄中所有節(jié)點(diǎn)的信息序列。
5.文件流:是該文件中數(shù)據(jù)資料的格式化序列,代表著所有數(shù)據(jù)的信息。
6.文件復(fù)制:將一個(gè)文件中所有的內(nèi)容全部備份到另外一個(gè)文件中。
7.函數(shù)回調(diào):回調(diào)是一種雙向調(diào)用模式,C 中通過(guò)函數(shù)指針來(lái)實(shí)現(xiàn)。



