輸入輸出重定向 dup dup2

2021-10-11 04:17:41 字數 1440 閱讀 8952

輸入重定向:將檔案匯入指定命令中

輸出重定向:將原本輸出開啟螢幕上資料資訊寫入到檔案當中

標準輸入重定向(stdin,檔案描述符為0):預設從鍵盤輸入,也可以從其他檔案或者命令中輸入

標準輸出重定向(stdout,檔案描述符為1):預設輸出到螢幕

標準輸出重定向符號

1「>」將標準輸出重定向到指定檔案中(清空原有資料)

2「>>」將標準輸出重定向到指定檔案中(追加到原有資料後面)

下面以》為例

1.首先用touch建立乙個空白資料夾readme.txt

2.用執行date>readme.txt 將原本應該顯示在螢幕上的內容寫入到readme.txt中

dup建立乙個檔案描述符的副本,但是新的fd(file descriptor)不可以被指定,預設為最小的沒有被使用的檔案描述符,dup2與dup相同可以建立乙個檔案描述符的副本,並且可以指定具體的檔案描述符。

dup與dup2的函式原型如下:

int

dup(

int oldfd)

;int

dup2

(int oldfd,

int newfd)

;

失敗返回-1

成功返回新fd

注意:dup和dup2建立的檔案描述符並不繼承原fd的屬性

案例:本案例將首先利用open函式開啟乙個檔案,然後利用dup2將stdout重定向到開啟的檔案,然後呼叫printf,這時printf列印的內容就會輸入到開啟的檔案當中。

#include

#include

#include

#include

#include

intmain

(int argc,

char

*ar**)

int newfd=

dup2

(fd,stdout_fileno)

;//將檔案描述符stdout_fien重定向到fd中,這樣輸出到螢幕的內容就會寫入fd指向的檔案中

if(newfd==-1

)printf

("------輸入到螢幕------\n");

//原本應該是列印在螢幕上,但是現在執行程式不會顯示在螢幕上,而是寫入./duptest.txt這個檔案當中

close

(fd)

;return0;

}

從下圖可以看出執行上面**後螢幕上沒有任何輸出,但是我們檢視duptest.txt這個檔案,檔案的內容就是原本我們要輸出到螢幕上的內容。

使用dup,dup2重定向的試驗

想在bash修改版 中得到執行使用者輸入命令後的回顯資料,沒調通。管道中沒有資料,應該是找到的fd不對。bash 執行使用者輸入的命令後,具體命令回顯用的是重定向。重定向用linuxc實現時,用的是dup和dup2.從頭做個試驗,體會一下dup和dup2的效果。本來可以在sshd 中嘗試得到回顯,因...

輸入輸出重定向

使用標準輸入流,標準輸出流和標準錯誤流,這些標準流都被預分配給鍵盤和顯示器。在需要的時候,可以使用重定向臨時改變這些預設分配。重定向是這樣一種過程,我們借助它指定乙個用於替代某個 標準檔案的檔案。輸入重定向 可以將標準輸入從鍵盤重定向到任何文字檔案。輸入重定向運算子為小於號 意味著該命令從此給 派的...

輸入輸出重定向

1.標準輸入的控制 語法 命令 檔案將檔案做為命令的輸入。例如 mail s mail test wesongzhou hotmail.com file1 將檔案file1 當做信件的內容,主 題名稱為mail test,送給收信人。2.標準輸出的控制 語法 命令 檔案將命令的執行結果送至指定的檔案...