主體思路就是,先用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...