簡易shell的實現

2021-10-06 22:19:32 字數 995 閱讀 2138

編寫乙個簡易shell,需要迴圈以下流程

獲取命令列

解析命令列

建立乙個子程序(fork)

替換子程序(execvp)

父程序等待子程序退出(wait)

**實現:

#include

#include

#include

#include

#include

#include

intmain()

;fgets

(buf,

1024

,stdin);

//從標準輸入讀取資料

//將最後的換行符修改為字串結尾標誌

buf[

strlen

(buf)-1

]='\0'

;printf

("cmd:[%s]\n"

, buf)

;//[ ls -a -l ]

char

*ptr = buf;

char

*ar**[32]

=;int argc =0;

while

(*ptr !=

'\0'

) ptr++;}

ar**[argc]

=null

;//最後乙個引數以null結尾

for(

int i =

0; i < argc; i++

)//不是直接對shell進行程式替換,因為替換後就沒有shell

pid_t pid =

fork()

;if(pid ==0)

waitpid

(pid,

null,0

);//阻塞等待子程序命令執行完畢

}return0;

}

運用程序中程序的建立,等待,替換知識完成。。。

簡易shell的實現

自主minishell實現 1 獲取標準輸入 2 解析輸入得到 命令名 執行引數 3 建立子程序 子程序中進行程式替換 4 程序等待 include include include include include intmain printf uesr localhost fflush stdout...

Shell,我的簡易實現!

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

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

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