linux實現自己的ls

2021-07-15 12:52:44 字數 1782 閱讀 1547

主體思路就是,先用readdir()函式獲取輸入的目錄下的所有子目錄和檔案的名在加以補全,然後在用stat()函式開啟檔案,獲取檔案的詳細資訊,實現**如下:
#include

#include

#include

#include

#include//不完全,缺少容錯性,及鏈結顯示問題和執行許可權x

#include

#include

#include

#include

#include

#include

//a 顯示隱藏檔案

//l 顯示詳細資訊

//r 顯示詳細目錄

//i 顯示節點索引

//n 將使用者名稱和組名用uid,gid表示

//f 不排序

//r 逆排序

void mls(char *name,int x,int y,int z,int u,int r,int mlsf,int mlsr) //(a,l,r,i,n,mlsf,mlsr)

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

else}}

//檔名排序

if(!mlsf)

}else}}

if(y)

for(i=0,m=0;iif(stat(a[i],&buf)) //它可以自動識別相對路徑下的檔案

printf("獲取檔案屬性失敗");

if(u)

printf("%7ld ",buf.st_ino);

if(y)

if(z)

if( s_isdir(buf.st_mode) )

if( strcmp(c[i],".") && strcmp(c[i],"..") )

strcpy(d[m++],a[i]);

if(!y)

if( x || z || (!x&&!y&&!z || w))

printf("%s ",c[i]);

if((i+1)%5==0)

if(i!=c-1)

printf("\n");}}

printf("\n");

if(z)

for(i=0;iint main(int argc,char *argv)

if(argv[1][i]=='f')

f=1;

if(argv[1][i]=='r')

r=1;

}mls(ml,x,y,z,w,n,f,r);

}break;

case

3: if(argv[1][0]!='-')

return

printf("引數輸入有誤");

else

if(argv[1][i]=='f')

f=1;

if(argv[1][i]='r')

r=1;

}mls(argv[2],x,y,z,w,n,f,r);

}break;

case

4: case

5: case

6: case

7: case

8:printf("只接受四個以下的引數,第三個引數時第二個引數為a l r f i n r的組合\n");

}}

存在的問題主要有: 對命令的解析不夠完全,在r是由於檔案很多導致段錯誤.

實現自己的ls命令

估計每個使用過 linux系統的人都知道 ls是啥吧。也相信大家都對 ls的簡單命令爛熟於心了吧,這裡就不想再贅述了,直接進入正題吧。裡面會有許多注釋,相信的家一定能看懂的。說明 此 我在kail linux下編譯無任何錯誤,執行也基本無bug,相信大家在一般linux下執行也無問題。include...

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

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

Linux基礎 ls功能的簡單實現

簡單的ls實現,首先,我們需要遍歷引數目錄下的各個檔案,再根據檔案相應的性質,讀取檔案的許可權,使用者組,使用者名稱,大小,最後一次訪問的時間,再根據檔名排序後依次顯示。具體的函式宣告如下 1 include 2 include 3 include 4 include 5 include 6 inc...