重定向
什麼是重定向?一般情況下、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...