此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...