關於dup改變檔案描述符(輸出重定向)

2021-08-18 16:20:51 字數 819 閱讀 4245

函式dup,接收乙個舊的檔案描述符,返回乙個新的檔案描述符(最小的未被分配的檔案描述符)

什麼是檔案描述符?

當程式開啟乙個現有檔案或者建立乙個新檔案時,核心向程序返回乙個檔案描述符。

核心(kernel)利用檔案描述符(file descriptor)來訪問檔案。檔案描述符是非負整數。

案例:將本來輸出到螢幕上的內容,重定向到某乙個檔案中

**:

1 #include 2 #include 3 #include 4 

5 int main()

6 13 printf("fd:%d",fd);//檔案abc占用的檔案描述符

14 close(1);//關閉1號檔案描述符(標準輸出)

15 dup(fd);//給原來abc檔案重新分配乙個最小的未使用的檔案描述符(1,因為我們剛剛關閉了它)

16 printf("hello\n");//給標準輸出的檔案描述符(1號)輸入這句話,但是我們需要注意的是,這時候這句話不會輸》 出到螢幕上,而是輸出到檔案abc中,因為我們改了1號檔案描述符指向檔案abc

17 close(fd);

18 return 0;

19 }

執行結果:

fd:3   並沒有輸出"hello",為什麼?那是因為我們把1號檔案描述符指向檔案abc,那麼輸出這句話時就輸出到檔案裡面去了,我們可以通過cat abc 來驗證,畫圖來解釋以上過程。

複製檔案描述符dup和dup2

檔案描述符的複製 dup和dup2是兩個非常有用的系統呼叫,都是用來複製乙個檔案的描述符,使新的檔案描述符也標識舊的檔案描述符所標識的檔案。int dup int oldfd int dup2 int oldfd,int newfd dup和dup2經常用來重定向程序的stdin,stdout和st...

關於檔案描述符

在linux下進行read和write時,發現當返回乙個檔案描述符,對它進行write操作,之後馬上read,讀出來的資料都是0,當時很奇怪,因為檔案描述符只是乙個int型的整數,不同於c下的fwrite,是直接返回乙個檔案指標,每次讀寫這個指標也會隨之而變化,於是查詢了關於檔案描述符的資料。檔案描...

關於檔案描述符

檔案描述符在形式上是乙個非負整數。核心 kernel 利用檔案描述符 file descriptor 來訪問檔案。開啟現存盤案或新建檔案時,核心會返回乙個檔案描述符。讀寫檔案也需要使用檔案描述符來指定待讀寫的檔案。實際上,它是乙個索引值,指向 核心為每乙個程序所維護的該程序開啟檔案的記錄表。當程式開...