手寫實現Linux中的ls命令

2021-09-27 04:05:43 字數 3489 閱讀 1614

此ls命令採用linux c實現,實現功能為可以輸入「./ls -l」(展示當前目錄下的所有檔案資訊),「./ls -li」(展示當前目錄下的所有資訊含inode) ,「./ls -li file」(展示特定檔案),"./ls -li directory"(採用遞迴訪問的方式展示目錄下的所有檔案)

此為工程所有源**檔案:

此部分用於處理命令列引數以及總功能函式的呼叫:

//    main.c

// author:kaier

// version:1.0

#include #include //#include"my_parse.h"

extern void my_parse(char *option,char *path);

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

else if(argc == 2)else if(argc >2)

/*handle directory file*/

if(s_isdir(buf.st_mode))

/*handle regular file*/

else if(s_isreg(buf.st_mode))

handle_reg(option,path);

}//my_parse

此部分分別對普通檔案和目錄及目錄檔案項的資訊展示,其中遇到目錄就進行遞迴:

//    handle.h

// author:kaier

// version:1.0

#ifndef _handle_h

#define _handle_h

void handle_reg(char *option,char *path);

void handle_dir(char *option,char *path);

#endif

//    handle.c

// author:kaier

// verison:1.0

#include #include #include #include #include#include #include #include #include#include #include static void show_info(struct stat *buf,char *path);

/*******************************/

/*handle the regular file*/

void handle_reg(char *option,char *path)

//if

if(strcmp(option,"-l")==0)

else if(strcmp(option,"-li")==0)

else//else

}/*handle the directory file*/

void handle_dir(char *option,char *path)

chdir(path);

while((p_dentry=readdir(dp))!=null)

else

}//while

chdir("..");

closedir(dp);

}/*-----------------all the subfunc of show info------------------*/

/*show authorities for user,group and others*/

static void show_perm(struct stat *buf)

; /*print specified file flag*/

if(s_isdir(buf->st_mode))

else if(s_islnk(buf->st_mode))

putchar('l');

else if(s_isblk(buf->st_mode))else

putchar('-');

/*print authorities of all user*/

for(i=3;i;i--)

//for

putchar(' ');

}/*get the owner name and group name on file*/

static void show_ugname(struct stat *buf)

/*show the last modified time for file*/

static void show_time(struct stat *buf)

/*show the file's name.if file is linking file,also show the source file*/

static void show_name(struct stat *buf,char *path)

else if(access(path,x_ok)==0)else//else

}//show the status infomation of file in list

static void show_info(struct stat *buf,char *path)

/*****************end of file************************/

makefile如下:

ls:main.o my_parse.o handle.o

gcc -g -o $@ $^

main.o:main.c

gcc -c $^ -o $@

my_parse.o:my_parse.c

gcc -g -c $^ -o $@

handle.o:handle.c

gcc -g -c $^ -o $@

clean:

rm -f *.o

執行示例:

對特定檔案(此處123為目錄檔案)進行資訊展示:

使用了遞迴方式進行目錄訪問:

手寫實現基礎的reactive

看一下mdn對proxy的定義 proxy 物件用於定義基本操作的自定義行為 如屬性查詢 賦值 列舉 函式呼叫等 語法 const p newproxy target,handler 所以根據proxy的特性,我們可以看到,使用了proxy,我們 的預期性會變差。看一下proxy的基本用法 let ...

手寫實現Promise的全部功能

發現的問題 在此過程中,發現 自己對 函式中的this指向,和詞法環境 的一些細節沒有掌握好,實現過程很痛苦!解決 應該惡補 下面上 1 function promise executor 16 17 18 1920 function reject data 31 32 3334 35 execut...

linux中ls命令詳解

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