實現自己的ls命令

2021-07-04 03:22:04 字數 3342 閱讀 2071

估計每個使用過

linux系統的人都知道

ls是啥吧。也相信大家都對

ls的簡單命令爛熟於心了吧,這裡就不想再贅述了,直接進入正題吧。

**裡面會有許多注釋,相信的家一定能看懂的。

說明:此**我在kail linux下編譯無任何錯誤,執行也基本無bug,相信大家在一般linux下執行也無問題。

**:

#include #include #include #include #include #include #include #include #include #include #include #include #include #define max_string 255 /*最長檔名,linux系統下規定檔名不允許超過255個字元,當然資料夾也是,因為資料夾就是特殊的檔案。*/

//煉表頭插法初始化,這裡使用的是巨集定義來進行鍊錶操作的,很高階,come on ,你也可以的

#define list_init(list,list_node_t)

//煉表頭插法巨集定義

#define list_addhead(list,newnode)

typedef struct str_sort //結構體,裡面僅儲存問價名

str_node_t;

//函式宣告部分

void my_stat(int flag,char *name);

void my_err(const char *err_string,int line);

char *analy_filetype(struct stat *buf);

void print_filemode_usr(struct stat *buf);

void print_filemode_gro(struct stat *buf);

void print_filemode_oth(struct stat *buf);

void print_usr_name(struct stat *buf);

void print_gro_name(struct stat *buf);

void print_time(time_t st_time);

int display(int flag,char *path);

void sort(int count,str_node_t *head);

int print_info_srv(int count,int flag,str_node_t *head);

int display(int flag,char *path) //檔案目錄解析函式,獲取當前目錄所有檔案

while((ptr=readdir(dir))!=null)

count=i;

print_info_srv(count,flag,head);

closedir(dir);

chdir(cwd); //轉到先前的目錄

}int print_info_srv(int count,int flag,str_node_t *head) //列印檔案資訊服務函式

my_stat(flag,p->str);

if(i==count-1)

}else

}}void sort(int count,str_node_t *head) //檔名排序函式,使用的是冒牌排序法

p=p->next;}}

}void my_stat(int flag,char *name) //列印檔案相關資訊

else

}else

else

}}char *month_analy(int month) //月份解析函式,linux底層是以0開始的,相信大家也並不意外

}void print_time(time_t st_time) //日期解析函式

else

if(p.tm_hour<2 || p.tm_hour>=23)

else

if(p.tm_min<10)

else

}void my_err(const char *err_string ,int line)

char *analy_filetype(struct stat *buf) //檔案型別解析函式

else if(s_isreg(buf->st_mode))

else if(s_isdir(buf->st_mode))

else if(s_ischr(buf->st_mode))

else if(s_isblk(buf->st_mode))

else if(s_isfifo(buf->st_mode))

else if(s_issock(buf->st_mode))

}void print_filemode_usr(struct stat *buf) //檔案所有者

void print_filemode_gro(struct stat *buf) //檔案所陣列

void print_filemode_oth(struct stat *buf) //其他使用者

void print_usr_name(struct stat *buf) //通過uid 輸出使用者名稱

void print_gro_name(struct stat *buf) //通過gid輸出使用者組名a

int main(int argc,char **argv)

else if(argc==2 && !strcmp("-l",argv[1])) //analysis: ls -l

else if(argc==2 && !strcmp("-a",argv[1])) //analysis: ls -a

else if(argc==2 && !strcmp("-al",argv[1])) //analysis: ls -al

else if(argc==2 && !strcmp("-la",argv[1])) //analysis : ls -la

else if(argc==2) //analysis: ls file

else if(argc==3 && !strcmp("-l",argv[1])) //analysis: ls -l file

else if(argc==3 && !strcmp("-a",argv[1])) //analysis : ls -a file

else if(argc==3 && !strcmp("-al",argv[1])) //analysis :ls -al file

else if(argc==3 && !strcmp("-la",argv[1])) //analysis :ls -la file

else

return 0;

}

程式設計實踐 實現自己的ls命令

函式功能 處理傳遞過來的路徑資訊,判斷檔案型別。函式功能 獲取檔案資訊 函式功能 獲取目錄資訊 函式功能 排序 函式功能 獲取檔案屬性並列印 函式功能 輸出檔名 函式功能 初始化鍊錶 函式功能 獲取最早插入的元素並刪除,判空 函式功能 插入新元素 函式功能 資訊輸出 引數處理部分自己開始沒有想出來,...

linux實現自己的ls

主體思路就是,先用readdir 函式獲取輸入的目錄下的所有子目錄和檔案的名在加以補全,然後在用stat 函式開啟檔案,獲取檔案的詳細資訊,實現 如下 include include include include include 不完全,缺少容錯性,及鏈結顯示問題和執行許可權x include i...

如何來寫自己的ls命令

如何來寫自己的ls命令 王老師,華清遠見嵌入式學院講師。很多實際證明,最好的學習方法是將相關的知識點應用到具體的例子中。這樣我們不僅知道了原理,也學會了怎麼應用。在學習檔案io時,我們可以嘗試來寫ls命令。所以在寫ls命令之前,我們必須要明確ls命令能做些什麼,然後才能知道要怎麼去寫ls命令。其實l...