Linux專案 仿寫bash程式

2021-10-03 14:59:07 字數 2786 閱讀 7434

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define num 20

#define length 128

char oldpwd[length]=;

// 儲存上一次的工作路徑

//輸出提示符

void

printftag()

//getuid 返回當前使用者的uid

//getpwuid 根據uid返回使用者資訊(返回型別為結構體指標)

struct passwd *pw =

getpwuid

(getuid()

);assert

(pw !=

null);

//獲取主機資訊

struct utsname hostname;

uname

(&hostname)

;//getcwd 獲取當前工作目錄的絕對路徑

char path[length]=;

getcwd

(path, length -1)

;char

*dirname =

null;if

(strcmp

(path, pw->pw_dir)==0

)//判斷當前路徑是不是家目錄

elseif(

strlen

(path)==1

)//判斷路徑是不是根目錄

else

dirname++;}

printf

("[%s@%s %s]%c"

, pw->pw_name, hostname.nodename, dirname, flag);}

//按空格切割命令字串

void

cutcommandstring

(char

*cmd,

char

*ar**)

//驗證切割是否成功

/* int i = 0;

for(; i < index; i++)

*/}//實現cd命令

void

achievecd

(char

*path)

;getcwd

(nowpath, length -1)

;if(path ==

null

||strncmp

(path,

"~",1)

==0)//切換到家目錄或家目錄下的目錄if(

strncmp

(path,

"-",1)

==0)//切換到上一次所在目錄

path = oldpwd;

}//切換目錄if(

-1==chdir

(path)

)//儲存切換之前的路徑到oldpwd中

memset

(oldpwd,

0, length)

;strcpy

(oldpwd, nowpath)

;//測試**

/* memset(nowpath, 0, length);

getcwd(nowpath, lenrth - 1);

printf("%s\n", nowpath);

*/}//分類命令,並且處理內建命令

intdealbuiltincmd

(char

*ar**)

if(strncmp

(ar**[0]

,"cd",2

)==0)

return0;

}//訊號處理函式

void

signback

(int sign)

//建立子程序

void

creatchild

(char

*ar**)

else

execv

(path, ar**)

;perror

(path)

;exit(0

);//防止子程序exec替換失敗

}else

// 後台執行}if

(strcmp

(ar**[i]

,"&")!=

0)}}

intmain()

;fgets

(cmd, length -1,

stdin);

//從標準輸入將字串寫入cmd 遇到回車結束,並且將回車符也獲取進來

cmd[

strlen

(cmd)-1

]=0;

//將回車符置0

//3. 字串的切割 按照空格將命令與選項和引數分開

char

*ar**[num]=;

//指標陣列,儲存分割後的各個字串

cutcommandstring

(cmd, ar**)

;//4. 分類命令 1.內建(cd exit) 2.外接if(

dealbuiltincmd

(ar**)

)//如果dealbuiltincmd函式處理的是內建命令,則程式返回while第一句,否則繼續執行

//5. 建立子程序,子程序替換外接命令,父程序wait等待子程序執行命令結束

creatchild

(ar**);}

}

專案 仿寫bash程式

專案目標 在linux平台下仿寫一些命令的實現 1.輸出提示符資訊,類似於 stu host desktop 2.等待使用者輸入命令 3.完成簡單的解析 沒輸入命令情況 直接敲回車 輸入內建命令的情況 cd exit.輸入外接命令的情況 ls.的總體框架就是這樣的 要想實現上述功能我們要清楚linu...

STL小結 仿寫TinySTL專案有感

六大元件 容器 類模板 演算法 函式模板 迭代器 類模板,設計模式 配置器 類模板 配接器 容器介面卡 函式配接器 仿函式 類或類模板 整個專案採用大多的是泛型程式設計的思想 模板機制 使得多種資料型別在同乙個演算法或結構上都可以操作,在編譯器就確定聚類資料型別。一 配置器 一般new都是要先申請空...

linux上寫obj c程式

ubuntu配置環境極其簡單,安裝gnustep需要以下命令 sudo apt get install gnustep gnustep devel 安裝好了以後,我們就可以開發objective c程式了!為了演示方便,我這裡寫乙個叫test的程式,新建乙個目錄在 test,原始檔code.m 如下...