簡易shell的實現

2021-09-28 14:52:01 字數 1240 閱讀 6716

/* 自主minishell實現

* 1、獲取標準輸入

* 2、解析輸入得到[命令名] + [執行引數]

* 3、建立子程序

* 子程序中進行程式替換

* 4、程序等待

*/#include

#include

#include

#include

#include

intmain()

;printf

("[uesr@localhost]$ ");

fflush

(stdout);

//%[^\n] 從緩衝區取資料的時候,遇到\n為止[ ls -l]

//經過這一步後,緩衝區中留下了\n,但是\n取不出來,導致scanf非阻塞

//但又取不出最後的\n字元

//%*c 從緩衝區中取出乙個字元(丟棄)if(

scanf

("%[^\n]%*c"

, buf)!=1

)//scanf給幾個空間分配內容(賦值)就返回幾

printf

("buf:[%s]\n"

, buf)

;//解析

int argc =0;

char

* ar**[32]

;char

* ptr = buf;

while

(*ptr !=

'\0'

)//在ls之後新增乙個字串結尾標誌

//因為我們想獲取的是ls,而不是[ls -l ]

*ptr =

'\0'

;printf

("ar**[%d] = %s\n"

, argc, ar**[argc -1]

);} ptr++;}

//ar** =

ar**[argc]

=null

;//實現shell內建命令if(

strcmp

(ar**[0]

,"cd")==

0)//實現shell命令

int pid =

fork()

;if(pid <0)

else

if(pid ==0)

//程序等待--避免殭屍程序

wait

(null);

}return0;

}

簡易shell的實現

編寫乙個簡易shell,需要迴圈以下流程 獲取命令列 解析命令列 建立乙個子程序 fork 替換子程序 execvp 父程序等待子程序退出 wait 實現 include include include include include include intmain fgets buf,1024 s...

Shell,我的簡易實現!

基礎知識 shell 是一種基本的使用者操作介面,通過對使用者輸入命令的解析完成相應的功能。shell 程式的執行包括 列印提示符 獲取命令列 解析命令 搜尋相應命令檔案 準備引數 執行命令 後台執行的程序 一般執行命令的時候,fork 乙個子程序去執行命令,父程序等待子程序完成任務。但是後台程序執...

用fock實現簡易shell(程式替換)

fork之後就會建立則程序,資料 堆 棧有兩份,仍然為乙份但是這個 段成為兩個程序的共享 段都從fork函式中返回,當父子程序有乙個想要修改資料或者堆疊時,兩個進 正 子程序在建立的時候會複製父程序的 不管是共用 還是複製 這就相當於父程序建立了乙個和自己功能完全相同的程序,這樣一來,子程序就只能進...