2021国产精品爽爽va在线_国产成人av三级在线观看_精品国产一区二区三区不卡_国产成A人亚洲精品无码樱花_99视频精品全部免费 在线

當(dāng)前位置: 首頁 >> 資訊 > > 正文

全球熱頭條丨ls命令實(shí)現(xiàn)_linux模擬ls命令代碼

2023-02-08 16:26:23來源:互聯(lián)網(wǎng)

linux模擬ls命令代碼代碼如下:

/*

模擬限位開關(guān)(限位開關(guān))命令,實(shí)現(xiàn)參數(shù)-塔里爾。有些代碼重復(fù)出現(xiàn),可改進(jìn)


(資料圖)

可以在該程序的基礎(chǔ)上增加參數(shù),該程序思路清晰,容易擴(kuò)展

*/

#包括

#包括

#包括

#包括

#包括

#包括

#包括

#包括

#包括

#包括

#定義LL (10) /*帶l參數(shù)標(biāo)志*/

#定義白細(xì)胞介素11) /*帶我參數(shù)標(biāo)志*/

#定義RU (12) /*帶稀有參數(shù)標(biāo)志*/

#定義TL (116) /*帶t參數(shù)標(biāo)志*/

#定義鋁(117) /*帶a參數(shù)標(biāo)志*/

#定義RL (118) /*帶r參數(shù)標(biāo)志*/

#定義長(zhǎng)度500 /*字符串最大長(zhǎng)度*/

#定義最大文件計(jì)數(shù)500/*文件列表最大長(zhǎng)度*/

/*函數(shù)聲明*/

void error(char* error_message,int line);

void display(struct stat* stalist,char (*namelist)[LENGTH],int n,int mode);

int file_list(char* path,struct stat* stalist,char (*namelist)[LENGTH],int mode);

void display _ simply(char(* name list)[LENGTH],int n);

void display _ LL(struct stat * stalist,char (*namelist)[LENGTH],int n);

void display _ IL(struct stat * stalist,char (*namelist)[LENGTH],int n);

void display _ LL _ IL(struct stat * stalist,char (*namelist)[LENGTH],int n);

void display _ RU(struct stat * stalist,char (*namelist)[LENGTH],int n,int mode);

void display _ RU _ LL(struct stat * stalist,char (*namelist)[LENGTH],int n,int mode);

void display _ RU _ IL(struct stat * stalist,char (*namelist)[LENGTH],int n,int mode);

void display _ RU _ IL _ LL(struct stat * stalist,char (*namelist)[LENGTH],int n,int mode);

/*主函數(shù)*/

int main(int argc,char **argv)

{

int i,j;

/*模式的前16個(gè)位用來標(biāo)志那些能影響顯示的參數(shù),16位之后的位用來標(biāo)志不影響輸出格式的參數(shù)。這個(gè)程序只用到了0-3位,16-18位,如果要在該程序的基礎(chǔ)上增加參數(shù),可以用其他沒有使用的位。

方式的第0位為一表示帶l參數(shù),模式的第一位為一表示帶我參數(shù),模式的第2位為一表示帶稀有參數(shù),模式的第16位為一表示帶t參數(shù),模式的第17位為一表示帶a參數(shù),模式的第18位為一表示帶r參數(shù)*/

int mode=0;

char error _ message[LENGTH]={ 0 };/*錯(cuò)誤信息*/

char path[LENGTH]={ 0 };/*路徑*/

struct stat stalist[MAX _ FILE _ COUNT];/*文件詳細(xì)信息數(shù)組*/

字符名稱列表[MAX _ FILE _ COUNT][LENGTH];/*文件名數(shù)組*/

int flag=0;/*判斷是否指定了目錄*/

(同Internationalorganizations)國(guó)際組織計(jì)數(shù);/*文件個(gè)數(shù)*/

/*解析參數(shù)*/

for(I=1;我

if(argv[i][0]=="-"){/*如果是選項(xiàng)參數(shù)*/

for(j=1;j

if(argv[i][j]=="l ")

模式=模式| LL

else if(argv[i][j]=="i ")

模式=模式| IL

else if(argv[i][j]=="R ")

模式=模式| RU

else if(argv[i][j]=="r ")

模式=模式| RL

else if(argv[i][j]=="a ")

模式=模式| AL

else if(argv[i][j]=="t ")

模式=模式| TL

否則{

snprintf(error_message,LENGTH," no option of %c ",argv[I][j]);

錯(cuò)誤(錯(cuò)誤消息,__行_ _);

}

}

}else{/*參數(shù)為目錄或文件*/

if(flag==1)

錯(cuò)誤("不能指定兩個(gè)以上的目錄或文件",_ _ LINE _ _);

其他

flag=1;

if(argv[i][0]!="/"){/*相對(duì)路徑*/

strcat(path,get _ current _ dir _ name());

strcat(路徑,"/");

strncat(path,argv[i],strlen(argv[I]);

}else/*絕對(duì)路徑*/

strcpy(path,argv[I]);

}

}

if(flag==0)/*未指定任何目錄或文件,則使用默認(rèn)當(dāng)前目錄*/

strcat(path,get _ current _ dir _ name());

/*根據(jù)方式獲取指定目錄下的文件*/

count=file_list(path,stalist,namelist,mode);

/*根據(jù)方式顯示文件*/

顯示(列表、名稱列表、計(jì)數(shù)、模式);

返回0;

}

/*獲取文件列表*/

int file_list(char* path,struct stat* stalist,char (*namelist)[LENGTH],int mode)

{

int i=0,index,j,k;

目錄*目錄

結(jié)構(gòu)方向* ptr

char str[LENGTH];

char name temp[LENGTH];

結(jié)構(gòu)狀態(tài)狀態(tài)

if(stat(path,stalist[0])0){

//puts(路徑);

錯(cuò)誤("指定文件不存在,_ _ LINE _ _);

}

if(S_ISDIR(stalist[0]).st_mode)){/*如果該路徑指向的是一個(gè)目錄*/

if((dir=opendir(path))==NULL){/*打開目錄*/

sprintf(str,無法打開“%s”,路徑);

error(str,_ _ LINE _ _);

}

chdir(路徑);/*改變當(dāng)前工作目錄到路徑*/

I=0;

while((ptr=readdir(dir))!=NULL){/*依次讀取目錄下的所有文件*/

if(ptr-d_name[0]==" . "?。J絘1))/*忽略隱藏文件*/

繼續(xù);

/*按字母順序插入到跟蹤者數(shù)組及名字表數(shù)組*/

for(j=I;j0;j - ){

if(strcmp(ptr-d_name,namelist[j-1])0)

打破;

}

for(k=I;kj;k - ){

strcpy(名稱列表[k],名稱列表[k-1]);

stalist[k]=stalist[k-1];

}

strcpy(namelist[j],ptr-d _ name);

stat(ptr-d_name,stalist[j]);

我;

if(I==最大文件數(shù))

錯(cuò)誤("文件計(jì)數(shù)超出" MAX_FILE_COUNT ",_ _ LINE _ _);

}

closedir(dir);

}否則{

j=strlen(path)-1;

while(j=0 path[j]!="/"){

j-;

}

如果(j0)

錯(cuò)誤("路徑錯(cuò)誤,_ _ LINE _ _);

j;

k=0;

while(path[j]){

名稱列表[0][k]=路徑[j];

j;

k;

}

名稱列表[0][k]=0;

返回1;

}

如果(模式TL){/*按文件修改時(shí)間排序*/

for(j=0;j

index=j;

for(k=j ^ 1;k

if(stalist[index].圣彼得堡時(shí)間

index=k;

}

statemp=stalist[j];

stalist[j]=stalist[index];

stalist[index]=statemp;

strcpy(nametemp,name list[j]);

strcpy(名稱列表[j],名稱列表[索引]);

strcpy(namelist[index],name temp);

}

}

如果(模式RL){/*反序排列*/

for(j=0;j

strcpy(nametemp,name list[j]);

strcpy(名稱列表[j],名稱列表[I-j-1]);

strcpy(namelist[i-j-1],name temp);

statemp=stalist[j];

stalist[j]=stalist[I-j-1];

stalist[I-j-1]=statemp;

}

}

返回我;

}

/*根據(jù)方式選擇不同的函數(shù)進(jìn)行顯示*/

void display(struct stat* stalist,char (*namelist)[LENGTH],int n,int mode)

{

/*使方式的高16位為0*/

int m=mode((116)-1);

開關(guān)(m){

案例0:

display_simply(namelist,n);

打破;

案例1:

display_LL(stalist,namelist,n);

打破;

案例二:

display_IL(stalist,namelist,n);

打破;

案例三:

display_LL_IL(stalist,namelist,n);

打破;

案例4:

display_RU(stalist,namelist,n,mode);

打破;

案例5:

display_RU_LL(stalist,namelist,n,mode);

打破;

案例6:

display_RU_IL(stalist,namelist,n,mode);

打破;

案例7:

display_RU_IL_LL(stalist,namelist,n,mode);

打破;

}

}

/*不帶顯示選項(xiàng),簡(jiǎn)單顯示文件名*/

void display _ simply(char(* name list)[LENGTH],int n)

{

int i,maxlength=0,cols

結(jié)構(gòu)winsize ts

for(I=0;我

if(strlen(name list[I])maxlength)

maxlength=strlen(name list[I]);

/*獲取終端的大小*/

ioctl(STDIN_FILENO,TIOCGWINSZ,ts);

cols=ts.ws _ col

cols/=(maxlength 1);

//lines=ts。ws _ row

for(I=0;我

如果(我!=0 i%cols==0)

puts(" ");

printf("%*s ",-(maxlength 1),name list[I]);

}

putchar(" \ n ");

}

/*-l參數(shù),顯示詳細(xì)文件信息*/

void display _ LL(struct stat * stalist,char (*namelist)[LENGTH],int n)

{

int i,模式

字符*字符串

for(I=0;我

mode=stalist[i].st模式

if(S_ISDIR(mode))

printf(" d ");

其他

printf("-");

如果(模式(18))

printf(" r ");

其他

printf("-");

如果(模式(17))

printf(" w ");

其他

printf("-");

如果(模式(16))

printf(" x ");

其他

printf("-");

如果(模式(15))

printf(" r ");

其他

printf("-");

如果(模式(14))

printf(" w ");

其他

printf("-");

如果(模式(13))

printf(" x ");

其他

printf("-");

如果(模式(12))

printf(" r ");

其他

printf("-");

如果(模式(11))

printf(" w ");

其他

printf("-");

如果(模式(10))

printf(" x ");

其他

printf("-");

printf(“%-3d”),stalist[i].ST _ nlink);

printf(" %-6s ",getpwuid(stalist[i]).ST _ uid)-pw _ name);

printf(" %-6s ",getgrgid(stalist[i]).ST _ GID)-gr _ name);

printf(" %-10d ",stalist[i].ST _ size);

str=ctime(stalist[i]).ST _ mtime);

str[strlen(str)-2]=0;

printf(" %s ",str);

printf(" %s\n ",名稱列表[i]).

}

}

/*-我參數(shù),顯示文件名及節(jié)點(diǎn)號(hào)*/

void display _ IL(struct stat * stalist,char (*namelist)[LENGTH],int n)

{

int i,maxlength=0,cols

結(jié)構(gòu)winsize ts

for(I=0;我

if(strlen(name list[I])maxlength)

maxlength=strlen(name list[I]);

/*獲取終端的大小*/

ioctl(STDIN_FILENO,TIOCGWINSZ,ts);

cols=ts.ws _ col

cols/=(maxlength 9);

//lines=ts。ws _ row

for(I=0;我

如果(我!=0 i%cols==0)

puts(" ");

printf(“%-8d”,stalist[i].ST _ ino);

printf("%*s ",-(maxlength 1),name list[I]);

}

putchar(" \ n ");

}

/*-李參數(shù),顯示詳細(xì)文件信息和節(jié)點(diǎn)號(hào)*/

void display _ LL _ IL(struct stat * stalist,char (*namelist)[LENGTH],int n)

{

int i,模式

字符*字符串

for(I=0;我

printf(“%-8d”,stalist[i].ST _ ino);

mode=stalist[i].st模式

if(S_ISDIR(mode))

printf(" d ");

其他

printf("-");

如果(模式(18))

printf(" r ");

其他

printf("-");

如果(模式(17))

printf(" w ");

其他

printf("-");

如果(模式(16))

printf(" x ");

其他

printf("-");

如果(模式(15))

printf(" r ");

其他

printf("-");

如果(模式(14))

printf(" w ");

其他

printf("-");

如果(模式(13))

printf(" x ");

其他

printf("-");

如果(模式(12))

printf(" r ");

其他

printf("-");

如果(模式(11))

printf(" w ");

其他

printf("-");

如果(模式(10))

printf(" x ");

其他

printf("-");

printf(“%-3d”),stalist[i].ST _ nlink);

printf(" %-6s ",getpwuid(stalist[i]).ST _ uid)-pw _ name);

printf(" %-6s ",getgrgid(stalist[i]).ST _ GID)-gr _ name);

printf(" %-10d ",stalist[i].ST _ size);

str=ctime(stalist[i]).ST _ mtime);

str[strlen(str)-2]=0;

printf(" %s ",str);

printf(" %s\n ",名稱列表[i]).

}

}

/*-R參數(shù),簡(jiǎn)單顯示所有文件,包括目錄下面的子目錄*/

void display _ RU(struct stat * stalist,char (*namelist)[LENGTH],int n,int mode)

{

int i,計(jì)數(shù)

char path[LENGTH]={0},temp[LENGTH]={0} .

struct stat sta[MAX _ FILE _ COUNT];

字符名稱[最大文件數(shù)][長(zhǎng)度];

puts(get _ current _ dir _ name());

display_simply(namelist,n);

putchar(" \ n ");

strcpy(path,get _ current _ dir _ name());

for(I=0;我

if(strcmp(namelist[i],".")==0 || strcmp(namelist[i],".")==0)

繼續(xù);

if(S_ISDIR(stalist[i]).st_mode)){

strcpy(temp,path);

strcat(路徑,"/");

strcat(path,name list[I]);

count=文件列表(路徑,sta,名稱,模式);

display_RU(sta,name,count,mode);

strcpy(path,temp);

}

}

}

/*-Rl參數(shù),顯示所有文件,包括目錄下面的子目錄的詳細(xì)信息*/

void display _ RU _ LL(struct stat * stalist,char (*namelist)[LENGTH],int n,int mode)

{

int i,計(jì)數(shù)

char path[LENGTH]={0},temp[LENGTH]={0} .

struct stat sta[MAX _ FILE _ COUNT];

字符名稱[最大文件數(shù)][長(zhǎng)度];

puts(get _ current _ dir _ name());

display_LL(stalist,namelist,n);

putchar(" \ n ");

strcpy(path,get _ current _ dir _ name());

for(I=0;我

if(strcmp(namelist[i],".")==0 || strcmp(namelist[i],".")==0)

繼續(xù);

if(S_ISDIR(stalist[i]).st_mode)){

strcpy(temp,path);

strcat(路徑,"/");

strcat(path,name list[I]);

count=文件列表(路徑,sta,名稱,模式);

display_RU_LL(sta,name,count,mode);

strcpy(path,temp);

}

}

}

/*-Ri參數(shù),簡(jiǎn)單顯示所有文件,包括目錄下的子目錄,及節(jié)點(diǎn)號(hào)*/

void display _ RU _ IL(struct stat * stalist,char (*namelist)[LENGTH],int n,int mode)

{

int i,計(jì)數(shù)

char path[LENGTH]={0},temp[LENGTH]={0} .

struct stat sta[MAX _ FILE _ COUNT];

字符名稱[最大文件數(shù)][長(zhǎng)度];

puts(get _ current _ dir _ name());

display_IL(stalist,namelist,n);

putchar(" \ n ");

strcpy(path,get _ current _ dir _ name());

for(I=0;我

if(strcmp(namelist[i],".")==0 || strcmp(namelist[i],".")==0)

繼續(xù);

if(S_ISDIR(stalist[i]).st_mode)){

strcpy(temp,path);

strcat(路徑,"/");

strcat(path,name list[I]);

count=文件列表(路徑,sta,名稱,模式);

display_RU_IL(sta,name,count,mode);

strcpy(path,temp);

}

}

}

/*-里爾參數(shù),顯示所有文件,包括目錄下面的子目錄的詳細(xì)信息,及節(jié)點(diǎn)號(hào)*/

void display _ RU _ IL _ LL(struct stat * stalist,char (*namelist)[LENGTH],int n,int mode)

{

int i,計(jì)數(shù)

char path[LENGTH]={0},temp[LENGTH]={0} .

struct stat sta[MAX _ FILE _ COUNT];

字符名稱[最大文件數(shù)][長(zhǎng)度];

puts(get _ current _ dir _ name());

display_LL_IL(stalist,namelist,n);

putchar(" \ n ");

strcpy(path,get _ current _ dir _ name());

for(I=0;我

if(strcmp(namelist[i],".")==0 || strcmp(namelist[i],".")==0)

繼續(xù);

if(S_ISDIR(stalist[i]).st_mode)){

strcpy(temp,path);

strcat(路徑,"/");

strcat(path,name list[I]);

count=文件列表(路徑,sta,名稱,模式);

display_RU_IL_LL(sta,name,count,mode);

strcpy(path,temp);

}

}

}

//錯(cuò)誤處理函數(shù)

void error(char* error_message,int line)

{

char str[5];

sprintf(str," %d:",line);

strcat(str,error _ message);

佩羅爾(str);

退出(退出_失敗);

}

看了"linux模擬ls命令代碼"還想看:

1.ls命令怎么使用

2.Linux操作系統(tǒng)操作系統(tǒng)常用指令大全

3.解決文件傳輸協(xié)議(文件傳輸協(xié)議的縮寫)的目錄或限位開關(guān)(限位開關(guān))命令無法查看文件列表的辦法

4.怎么實(shí)現(xiàn)限位開關(guān)(限位開關(guān))命令在win7下正常運(yùn)行

本文到此結(jié)束,希望對(duì)大家有所幫助。

標(biāo)簽: 限位開關(guān) 所有文件 詳細(xì)信息