其實這些命令的實現都是 c 語言提供的一些庫函式,我們只需要使用這些函式,並對得到的結果進行相應的格式化即可,好的,我們開始吧:
ls 用到的函式是 opendir ,readdir,這些都是讀目錄的函式,讀取目錄中的內容之後 ,我們可以對它進行解析,它是一條一條的讀的,所以,我們可以得到全部的檔案。
pwd 用到的函式是 getcwd ,這個函式的意思是 get current working directory ,很明顯,它的意圖就是得到當前的工作目錄
cd 用到的函式是chdir ,這個函式的意思是 change directory,也是一樣的明顯,改變目錄。
好了,我們來看以個例子吧:
/*
* linux_cmd.c
* * created on: 2023年12月1日
* author: dlutbrucezhang
*/#include #include #include #include #include #include void my_ls(char *cur_dir);
void my_cd(const char *cd_to);
char * my_pwd();
char buffer[512];
int main(int argc, char **argv, char **environ)
void my_ls(char *cur_dir)
; char t_buffer[128] = ;
char sbuf[512] = ;
printf("%s\n", cur_dir);
dir = opendir(cur_dir);
while ((link = readdir(dir)) != null)
if (strcmp(link -> d_name, ".") == 0 || strcmp(link -> d_name, "..") == 0)
strcpy(file_type, "----------");
switch (buf.st_mode & s_ifmt)
if (buf.st_mode & s_irusr)
if (buf.st_mode & s_iwusr)
if (buf.st_mode & s_ixusr)
if (buf.st_mode & s_irgrp)
if (buf.st_mode & s_iwgrp)
if (buf.st_mode & s_ixgrp)
if (buf.st_mode & s_iroth)
if (buf.st_mode & s_iwoth)
if (buf.st_mode & s_ixoth)
p = gmtime((time_t *)&(buf.st_mtim));
strftime(t_buffer, 128, "%b %e %h:%m", p);
sprintf(sbuf, "%s %3d %-8d %-8d %8lu %s %s", file_type,
(int)buf.st_nlink, buf.st_uid, buf.st_gid, (long)buf.st_size,
t_buffer, link -> d_name);
printf("%s\n", sbuf); }}
void my_cd(const char *cd_to)
char * my_pwd()
輸出的結果如下所示:
/home/administrator/brucezhang
/home/administrator/brucezhang
-rw-r--r-- 1 1000 1000 32089 oct 8 07:49 change_wlan.c~
-rw-r--r-- 1 1000 1000 33257 sep 23 06:35 手把手教你如何寫makefile.pdf
-rwxr-xr-x 1 1000 1000 7425 aug 31 06:27 keygen_ue
drwxrwxr-x 2 1000 1000 4096 mar 19 06:13 android
drwx------ 3 1000 1000 4096 jul 10 11:57 shell to c
-rw-rw-r-- 1 1000 1000 157949932 nov 25 01:26 wps-office_8.1.0.3724~b1p2_i386.deb
drwxrwxr-x 3 1000 1000 4096 sep 9 11:15 gedit-source-code-browser-master
-rw-rw-r-- 1 1000 1000 26072675 oct 28 08:50 fcitx-sougou.7z
drwxrwxr-x 15 1000 1000 4096 nov 10 10:58 tests
drwxrwxr-x 2 1000 1000 4096 nov 2 01:55 pthread_pool_test
drwxrwxr-x 2 1000 1000 4096 nov 2 02:39 sort_list
drwxrwxr-x 2 1000 1000 4096 nov 1 13:31 cpp_pthread_pool_test
drwx------ 2 1000 1000 4096 jul 9 10:40 a
-rw-rw-r-- 1 1000 1000 1782257 dec 1 02:16 cpp_primer4_cn.chm
drwxrwxr-x 2 1000 1000 4096 nov 2 02:09 threadpool
-rw-rw-r-- 1 1000 1000 888 nov 1 10:25 cthread.h
drwxrwxr-x 4 1000 1000 4096 nov 10 05:02 command_test
-rw-r--r-- 1 1000 1000 16876 oct 10 06:31 iw_change_change.sh
drwxrwxr-x 2 1000 1000 4096 may 3 15:03 coding
drwx------ 2 1000 1000 4096 oct 5 11:44 ultraedit3.3
初學linux命令 ls pwd
命令一 名稱 ls 原意 list 命令功能 列出目標目錄中所有的子目錄和檔案。語法 ls 選項 ald 檔案或目錄 常用的選項 引數 a 原意 all 功能 列出目錄下的所有檔案,包括以.開頭的隱含檔案 l 原意 long 功能 除了檔名之外,還將檔案的許可權 所有者 檔案大小等資訊詳細列出來。d...
實現Linux的whoami命令
linux下的whoami命令會顯示當前的使用者是誰,也就是顯示自己的使用者名稱。開始我一直想從utmp檔案入手,但是總不知道怎麼確定自己,後來我去群裡問了,他們說每個程序都有使用者id,而使用者id可以通過geteuid系統函式獲得,有了id就好辦了,下面是怎麼將他轉化成乙個使用者名稱,用utmp...
實現linux的cp命令
主要運用open 開啟檔案,運用read 讀出檔案的內容到緩衝區,write 將緩衝區的內容寫入新的檔案,來模擬實現linux命令的cp功能。注意可以通過使用lseek 函式來獲取檔案的大小。c語言實現linux cp命令 include open 所需標頭檔案 include lseek 所需標頭...