本次實驗是輸出重定向,實驗目的是實現printf輸出字元寫到test.txt檔案中。
實驗環境是阿里雲ubuntu16.04系統。編譯器是gcc5.4版本。
思路是先關閉檔案描述符1 使用close函式和dup函式
檔案描述符前三個是固定的,0號檔案描述符是輸入檔案描述符,1號檔案描述符是輸出檔案描述符,2號是錯誤檔案描述符。所以先關閉1號檔案描述符。dup()函式的作用是返回乙個新的檔案描述符,從0 開始找個空閒的檔案描述符。由於剛才把檔案描述符1關閉了。所以1號檔案描述符為空閒,就fd檔案描述符就指向了1號檔案描述符。所以 printf()輸出的字元指向了fd檔案描述符。fd檔案描述符是開啟了test.txt檔案。所以重定向到了test.txt檔案中。這樣就使得 printf() 函式輸出的字元列印在了 test.txt 中。從而實現檔案重定向。
#include #include #include #include #include #include #include #include #include #define err_exit(m) \
do \
while(0)
int main()
close(1);
dup(fd);
printf("11111111");
return 0;
}
注意:在資料夾下要有test.txt 資料夾,要不然會沒有發現檔案。或者open函式的時候建立乙個也是可以的。
第二種重定向得方法使用dup2函式
dup2函式的功能是強制使用檔案描述符,不管檔案描述符1是否關閉都可以使用檔案描述符1.類似於先關閉檔案描述符1在dup一下
dup2(fd,1); 只需要這乙個就可以了。
#include #include #include #include #include #include #include #include #include #define err_exit(m) \
do \
while(0)
int main()
// close(1);
// dup(fd);
dup2(fd,1);
printf("12345657890");
return 0;
}
還有一種就是使用fcntl函式實現檔案重定向。
fcntl函式和dup函式類似,不過功能要強大的多,fcntl(fd,f_dupfd,0) 這個函式有三個引數,第乙個是檔案描述符 fd 。第二個引數的意思是複製檔案描述符的意思。第三個引數的意思是從0開始搜尋可以用的檔案描述符。所以先刪除檔案描述符1.
當然fcntl 函式功能很強大,可以根據第二個引數完成不同的任務。(本次實驗不討論)
#include #include #include #include #include #include #include #include #include #define err_exit(m) \
do \
while(0)
int main()
//close(1);
//dup(fd);
//dup2(fd,1);
close(1);
if(fcntl(fd,f_dupfd,0) < 0)
printf("hello\n");
return 0;
}
linux輸出重定向
標準輸入輸出 裝置 鍵盤 顯示器 顯示器 裝置檔名 dev stdin dev sdtout dev sdterr 檔案描述符 0 1 2 型別 標準輸入 標準輸出 標準錯誤輸出 輸出重定向 標準輸出重定向 命令 檔案 以覆蓋的方式,把命令的正確輸出輸出到指定的檔案或裝置當中 命令 檔案 以追加的方...
Linux輸出重定向
linux shell 環境中支援輸入輸出重定向,用符號 和 來表示。0 1和2分別表示標準輸入 標準輸出和標準錯誤資訊輸出,可以用來指定需要重定向的標準輸入或輸出,比如 2 a.txt 表示將錯誤資訊輸出到檔案a.txt中。同時,還可以在這三個標準輸入輸出之間實現重定向,比如將錯誤資訊重定向到標準...
linux輸出重定向
linux shell使用 和 符號來對輸入輸出做重定向。約定 0,1,2分別代表 標準輸入,標準輸出,標準錯誤輸出。下面以ls命令為例加以說明,其他命令或程式的使用方式相同。例1 把標準輸出重定向到log.txt root localhost es ls 1 log.txt 例2 把標準錯誤重定向...