linux實現簡單的shell以及管道

2021-10-06 04:55:52 字數 1081 閱讀 9024

#include#include#include#include#include#include#include#include#includeusing namespace std;

const int shellnum =32;

const char * file_all = ;

const char * file_half = ;

//把輸入轉換為exec函式組可用的引數

void cmd2ar**(char **, char *);

//沒有 | 的情況

void cmd_no_grep(char **, char *);

//需要管道的情況

void cmd_with_grep(char **, char *, int );

//用來完成管道

bool filereverse();

//輸出到螢幕

void file2srcn();

int main()

}void cmd2ar**(char **ar**, char *cmd)

{ int cnt=0,bg=0,end=0;

while(cmd[bg] != '\0')

{//去除命令前面的空格

while(cmd[bg] == ' ')

bg++;

end = bg;

//確定命令的結尾

while(cmd[end] != ' ' && cmd[end] != '\0')

end++;

/*下面這個判斷時因為下面這種情況我這段**會有bug

ls -l (l後面還有兩個空格)

這是程式會成功拆開ls和-l 但是此時由於-l後面不是\0

所以while迴圈還會繼續,但是這種情況最後 bg == end

所以用下面這個判斷進行避免

*/if(bg != end)

{ar**[cnt] = new char[end-bg+1];

strncpy(ar**[cnt], cmd+bg, end-bg);

//cout<<":"《目前支援shell解析以及管道,但是重定向這種還沒實現

實現簡單的shell

shell就是運用程式替換的原理進行實現的。何為程式替換?假如作業系統正在執行某乙個程式,然後我們利用程式替換函式指定乙個新的程式,讓作業系統去執行我們新指定的程式。也就是這樣一種情形下,我們fork乙個程序,如果fork成功,子程序會和父程序執行相同的 而我們建立子程序是希望子程序執行指定的操作,...

Linux下實現簡單的shell直譯器

shell是系統的使用者介面,提供了使用者與核心進行互動操作的一種介面。它接受使用者輸入的命令並把它送入核心去執行。實際上shell就是乙個命令直譯器,它解釋有使用者輸入的命令並且把它們送到核心。不僅如此,shell有自己的程式語言用於對命令的編輯,它允許使用者編寫由shell命令組成的程式。she...

linux下自行實現的簡單shell程式

學過exec系列函式後,我嘗試自行實現乙個shell程式,先上 include include include include include include include include define num 32 using namespace std int main for pid t i...