如何用C實現(xiàn)linux下的ls命令_第1頁
如何用C實現(xiàn)linux下的ls命令_第2頁
如何用C實現(xiàn)linux下的ls命令_第3頁
如何用C實現(xiàn)linux下的ls命令_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、首先我講一下寫這篇東西的目的。我覺得對于很多l(xiāng)inux新手。尤其是在自學(xué)的同學(xué)。最好的學(xué)習(xí)的方法就是通過具體的例子。通過一個實踐的例子,在學(xué)習(xí)相關(guān)的知識點的同時,就把它們應(yīng)用到這例子中。這樣不僅知道了原理。也知道了怎么去應(yīng)用。下面就開始用一個常用的命令”ls”開始。所有的東西都是從最基本的原理開始。一步步來教你怎么實踐出一個命令    (一)ls命令簡單介紹    第一步當然是要明白ls究竟是做什么的。如果你要做一個東西卻不知道要用來干嘛。會不會很搞笑?所以下面就簡單的介紹ls命令的作用和怎么使用   

2、1.Ls可以列出文件名和文件的屬性    在命令行輸入ls: ls 命令.jpgLs的默認動作是找出當前所有文件的文件名。按字典排序后輸出。Ls還能顯示其他的信息。如果加上-l就會列出每個文件的詳細信息。也叫l(wèi)s的長格式:2.        列出指定目錄或文件的信息    Linux系統(tǒng)中會有很多目錄。每個目錄中又會有很多文件。如果要列出一個非當前目錄的內(nèi)容或者是一個特定文件的信息,則需要在參數(shù)中給出目錄名或文件名。如:    ls /

3、tmp /列出/tmp目錄中各文件的文件名    ls docs /列出docs目錄中各文件的屬性    ls *.c /列出當前目錄下與*.c匹配的文件,即當前目錄下所有以.c為后綴的文件    3.        經(jīng)常用到的命令行選項    ls -l 在前面已經(jīng)提到過,-l就是輸出文件詳細的信息。也叫長格式;    ls -a 列出的內(nèi)容包含以“.“開頭的讓文件,即所謂有

4、隱藏文件    ls lu 顯示最后訪問時間    ls t 輸出時按時間排序    ls F 顯示文件類型    ls 命令的參數(shù)選項非常多,大多也可以組合使用。所以還是比較復(fù)雜的。但是我們第一步要實現(xiàn)的就是它最基本的功能:列出當前目錄下的所有文件或子目錄。    (二)學(xué)習(xí)必備的知識    既然是列出文件和目錄,那么肯定是和linux文件系統(tǒng)有關(guān)系的,所以要寫ls命令,至少要對文件系統(tǒng)的基本原理有一定的了解。為了

5、不至于使這個帖子內(nèi)容過于復(fù)雜,我把這方面的知識介紹單獨開了一個帖子:    linux 文件系統(tǒng)詳解    如果你對這些已經(jīng)有所了解。就會知道linux下的文件都是以/為根目錄的樹型結(jié)構(gòu),雖然linux下有普通文件、目錄文件、鏈接文件、設(shè)備文件、管道文件這幾種類型。但鏈接文件、設(shè)備文件、管道文件都可以當做普通文件看待,那實際也就只要區(qū)分普通文件和目錄文件這兩種了。而目錄文件的內(nèi)容就是它所包含所有文件和子目錄的一個列表,所以只要打開目錄文件并讀取對應(yīng)目錄塊里的那個列表數(shù)據(jù),就可以得到些目錄下所有文件和子目錄的名稱了。其實這個流程簡單,就

6、是:打開目錄->讀取內(nèi)容->顯示文件名稱->關(guān)閉打開的目錄。用偽代碼流程表示如下:    Mani()    Opendir    While(readdir)    Print d_name    Closedir;    那么現(xiàn)在的問題是用什么函數(shù)去打開并讀目錄呢?又是怎么樣來讀出數(shù)據(jù)呢?這里介紹是的opendir 和readdir,但是可能對于一些新手來說,就算知道了函數(shù)名稱也不一定知道怎么用

7、。別急,下一步就是教你怎么去查相應(yīng)函數(shù)的幫助資料。    linux下查看幫助手冊的命令是man,關(guān)于man的詳細介紹在這個帖子里我有詳細介紹:linux 幫助手冊頁命令 man詳解 如果對這方面還不是很清楚的可以先去學(xué)習(xí)一下。    好了,如果你已經(jīng)明白man的用法,我們就開始查看opendir和readdir的用法    我們在命令行輸入:    # man 3 opendir解釋:    #include   

8、 #include    這是必須包含的頭文件    DIR *opendir(const char *name); 是函數(shù)原型;其中DIR * 表示是返回一個 DIR類型的指針,const char *name 是傳入的參數(shù)    RETURN VALUE 是對返回值的說明。這里說明了如果有錯誤就返回NULL    DESCRIPTION: opendir()用來打開參數(shù)name指定的目錄,并返回DIR * 形態(tài)的目錄流,DIR 并指向目錄流的第一位解釋: 

9、60;  頭文件和opendir一樣    函數(shù)原型:struct dirent * readdir(DIR * dir);    函數(shù)說明  readdir()返回參數(shù)dir目錄流的下個目錄進入點。    Struct dirent這一段是結(jié)構(gòu)說明,基中解釋分別下:    d_ino 此目錄進入點的inode    d_off 目錄文件開頭至此目錄進入點的位移    d_reclen _name

10、的長度,不包含NULL字符    d_type d_name 所指的文件類型    d_name 文件名    (三)學(xué)完成代碼    在當前目錄創(chuàng)建新文件ls1.c;前輸入以下內(nèi)容    代碼:    #include    #include    #include    void do_ls(char );main(int

11、ac, char *av)    if ( ac = 1 )        do_ls( '.' );    else        while ( -ac )            printf('%s:n', *+av );  

12、60;         do_ls( *av );        void do_ls( char dirname )/* *  list files in directory called dirname */    DIR     *dir_ptr;       /* the directory */&#

13、160;   struct dirent   *direntp;       /* each entry    */    if ( ( dir_ptr = opendir( dirname ) ) = NULL )        fprintf(stderr,'ls1: cannot open %sn', dirname);  &

14、#160; else            while ( ( direntp = readdir( dir_ptr ) ) != NULL )            printf('%sn', direntp->d_name );        closedir(dir_ptr);        保存并退出;    (四)怎么編譯和運行    編寫好代碼好就要編譯了; linux的常用編譯工具就

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論