linux輸出重定向

2021-09-05 09:59:15 字數 1814 閱讀 4882

本次實驗是輸出重定向,實驗目的是實現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 把標準錯誤重定向...