自主shell輸入 輸出重定向

2021-08-20 13:53:59 字數 1520 閱讀 9752

重定向

什麼是重定向?一般情況下、linux執行命令時都會開啟三個檔案:stdin(標準輸入)、stdout(標準輸出)、stderr(標準錯誤)。檔案描述符分別為0、1、2。重定向就是把原本應該到標準輸入、標準錯誤、標準輸出的內容到file中。

重定向的本質是什麼?例如,printf是c庫中的io函式,會把內容輸出到stdout,在stdout底層訪問檔案的時候,找的還是fd為1的內容,但是當把fd的內容改為file的位址時,輸出的訊息就會往file之中。

看**:

1

#include

2#include

3#include

4#include

5#include

6#include

7#include89

void do_exec(int argc,char*argv)

10 18int s;

19 waitpid(pid,&s,0);

20 }

2122

void do_parse(char *buf)//對輸入的字串進行解析,得到檔名,及命令列引數。

23 else

if(buf[i]==' ')

35

39 }

40 argv[argc] = null;

41 do_exec(argc,argv);

42 }

4344

int main()

45 52printf("myshell>");

53 fflush(stdout);

54memset(buf,0x00,sizeof(buf));

55scanf("%[^\n]%*c",buf);

56if(strncmp(buf,"exit",4)==0)

57

6061 do_parse(buf);

62 }

63 }

shell實現原理:

linux下一切皆檔案,執行命令時,找到該命令所對應的檔案,根據命令所對應的引數實現對應的操作。

shell實現:

獲得執行命令:例如」ls -l」。do_parse()對命令進行解析得到」ls」,」-l」。」ls」為命令檔名,」-l」是命令列引數。fork()建立子程序,execvp()程序替換,

達到執行ls -l命令的操作。

實現如下:

首先,建立乙個test檔案,用來作為代替標準輸入或標準輸出。

編輯檔案內容如下:

執行myshell,結果如下:

Shell 輸入 輸出重定向

大多數 unix 系統命令從你的終端接受輸入並將所產生的輸出傳送回 到您的終端。乙個命令通常從乙個叫標準輸入的地方讀取輸入,預設情況下,這恰好是你的終端。同樣,乙個命令通常將其輸出寫入到標準輸出,預設情況下,這也是你的終端。重定向命令列表如下 命令說明 command file 將輸出重定向到 fi...

Shell 輸入 輸出重定向

大多數 unix 系統命令從你的終端接受輸入並將所產生的輸出傳送回 到您的終端。乙個命令通常從乙個叫標準輸入的地方讀取輸入,預設情況下,這恰好是你的終端。同樣,乙個命令通常將其輸出寫入到標準輸出,預設情況下,這也是你的終端。重定向命令列表如下 命令說明 command file 將輸出重定向到 fi...

Shell輸入輸出重定向

大多數 unix 系統命令從你的終端接受輸入並將所產生的輸出傳送回 到您的終端。乙個命令通常從乙個叫標準輸入的地方讀取輸入,預設情況下,這恰好是你的終端。同樣,乙個命令通常將其輸出寫入到標準輸出,預設情況下,這也是你的終端。重定向命令列表如下 命令說明 command file 將輸出重定向到 fi...