Linux命令的實現 ls pwd cd

2021-06-19 11:29:03 字數 3502 閱讀 2891

其實這些命令的實現都是 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 所需標頭...