linux ls命令的簡要實現

2021-10-06 09:02:54 字數 1802 閱讀 8011

本程式來自《unix環境高階程式設計》第三版 圖1-3

程式名:myls.c

#include "apue.h"

#include int main(int argc,char *ar**)

編譯出現錯誤,如下圖:

將apue.h複製到/usr/include/:

重新編譯,又出現錯誤:

需要找到「err_quit」和「err_sys」宣告的檔案,將其匯入。它們在的檔案為「error.c」。

將error.c複製到/usr/include/:

開啟目錄/usr/include:

開啟檔案apue.h:

在apue.**件末尾的#endif  /* _apue_h */前面新增**#include "error.c",然後儲存檔案:

重新編譯,沒有報錯,預設生成a.out:

現在我們測試一下這個程式:

從上圖可以看出根目錄下的所有檔案。

struct __dirstream

;typedef struct __dirstream dir;

dir結構體類似於file,是乙個內部結構,函式 dir *opendir(const char *pathname),即開啟檔案目錄,返回的就是指向dir結構體的指標,而該指標由以下幾個函式使用:

struct dirent *readdir(dir *dp);   

void rewinddir(dir *dp);   

int closedir(dir *dp);   

long telldir(dir *dp);   

void seekdir(dir *dp,long loc); 

由於opendir函式返回指向dir結構的指標後,我們就將該指標傳送給上面的函式等,所以並不關心dir結構中包含了什麼內容。

struct dirent

long d_ino;                                    /* inode number 索引節點號 */

off_t d_off;                                     /* offset to this dirent 在目錄檔案中的偏移 */

unsigned short d_reclen;               /* length of this d_name 檔名長 */

unsigned char d_type;                   /* the type of d_name 檔案型別 */

char d_name [name_max+1];     /* file name (null-terminated) 檔名,最長255字元 */

標頭檔案:#include #include

定義函式:struct dirent * readdir(dir * dir);

函式說明:readdir()返回引數dir 目錄流的下個目錄進入點。

返回值:成功則返回下個目錄進入點. 有錯誤發生或讀取到目錄檔案尾則返回null.

參考:從零開始unix環境高階程式設計(0):linux下執行第乙個程式

Linux ls 命令實現(簡化版)

在學習linux系統程式設計的時候,實現了ls命令的簡化版本。實現的功能如下 1.每種檔案型別有自己的顏色 普通檔案,d 目錄檔案,l 鏈結檔案,c 字元裝置檔案,b 快裝置檔案,p 管道檔案,s socket檔案。共7種 2.支援的引數有 hali a 顯示隱藏檔案,i 顯示inode節點號,l ...

Linux ls命令詳解

ls 命令可以說是linux下最常用的命令之一。a 列出目錄下的所有檔案,包括以 開頭的隱含檔案。後有詳解 b 把檔名中不可輸出的字元用反斜槓加字元編號 就象在c語言裡一樣 的形式列出。c 輸出檔案的 i 節點的修改時間,並以此排序。d 將目錄象檔案一樣顯示,而不是顯示其下的檔案。e 輸出時間的全部...

Linux ls命令詳解

ls命令用來顯示目標列表,在linux中是使用率較高的命令。ls命令的輸出資訊可以進行彩色加亮顯示,以分割槽不同型別的檔案。1.命令格式 ls 選項 引數 2.命令選項 a 顯示所有檔案及目錄 ls內定將檔名或目錄名稱為 的視為影藏,不會列出 a 顯示除影藏檔案 和 以外的所有檔案列表 c 多列顯示...