Linux 帶你理解檔案描述符和重定向

2021-10-07 05:48:35 字數 3181 閱讀 9811

重定向使用 dup2 系統呼叫

檔案描述符就是核心中struct file* fd_array陣列的下標,程序可以通過這個下標找到檔案的描述資訊,進而操作檔案。

檔案描述符(0 & 1 & 2)

]而現在知道,檔案描述符就是從0開始的小整數。當我們開啟檔案時,作業系統在記憶體中要建立相應的資料結構來描述目標檔案。於是就有了file結構體。表示乙個已經開啟的檔案物件。而程序執行open系統呼叫,所以必須讓程序和檔案關聯起來。每個程序都有乙個指標*files, 指向一張表files_struct,該錶最重要的部分就是包涵乙個指標陣列,每個元素都是乙個指向開啟檔案的指標!所以,本質上,檔案描述符就是該陣列的下標。所以,只要拿著檔案描述符,就可以找到對應的檔案

檔案描述符的分配規則

最小未使用

**示例:

#include

#include

#include

#include

intmain()

printf

("fd: %d\n"

, fd)

;close

(fd)

;return0;

}

輸出發現是fd: 3關閉0或者2,在看

#include

#include

#include

#include

intmain()

printf

("fd: %d\n"

, fd)

;close

(fd)

;return0;

}

發現是結果是:fd: 0 或者 fd: 2檔案描述符的分配規則:在files_struct陣列當中,找到當前沒有被使用的最小的乙個下標,作為新的檔案描述符。注意:為什麼開啟乙個檔案,如果不操作了一定要關閉,釋放資源?

檔案描述符實際是有限的,若不關閉檔案,檔案描述符被用光了,就打不開新檔案了

printf列印資料到標準輸出,close(1),就是把標準輸出關閉了;開啟新的檔案後,printf並沒有把資料列印出來,而是在重新整理緩衝區之後,將資料寫入到了檔案中!

在寫入檔案的時候:

檔案流指標和檔案描述符的關係

檔案描述符:是乙個非負整數

檔案流指標:file結構體 - - typedef struct _io_file file

檔案流指標是庫函式io介面的操作控制代碼

檔案描述符是系統呼叫io介面的操作控制代碼

檔案流指標這個結構體中封裝了檔案描述符

通過檔案流指標進行最終檔案操作的時候,依然還要能夠找到檔案對應的檔案描述符才可以

檔案流指標是乙個結構體,結構體中有很多成員變數,其中就有乙個叫 _fileno (這是檔案描述符)

那如果關閉1呢?看**:

#include

#include

#include

#include

#include

intmain()

printf

("fd: %d\n"

, fd)

;fflush

(stdout);

close

(fd)

;exit(0);}

此時,我們發現,本來應該輸出到顯示器上的內容,輸出到了檔案myfile當中,其中,fd=1。這種現象叫做輸出重定向。

常見的輸出重定向

有:> (清空重定向);>> (追加重定向)

符號作用

命令 > 檔案

將標準輸出重定向到檔案中(清除原有檔案中的資料)

命令 >> 檔案

將標準輸出重定向到檔案中(在原有的內容後追加)

重定向的本質

針對檔案描述符所對應的檔案描述資訊的重定向:

int

dup2

(int oldfd,

int newfd)

;- 描述符重定向函式

第一行 >/dev/null , 2>&1 這兩個重定向交換位置的意義不同!

乙個程序如何從使用者態切換到核心態執行?

答案:系統呼叫介面,異常,中斷

6.在bash中,在一條命令後加入」1>&2」意味著

a 標準輸出重定向到標準錯誤輸出

b 標準輸入重定向到標準錯誤輸出

c 標準輸出重定向到標準輸入

d 標準錯誤輸出重定向到標準輸入

正確答案: a

答案解析

0 ,1,2叫檔案描述符;linux中,每開啟乙個檔案都有乙個小的整數與之對應,就是檔案描述符!

0 是標準輸入的 (stdin)

1 是標準輸出的 (stdout)

2 是標準報錯輸出的 (stderr)

'『>』是輸出重定向符

看到這裡啦,動動小手留個贊吶!

linux 檔案描述符和inode 的理解和區別

inode 或i節點是指對檔案的索引。如乙個系統,所有檔案是放在磁碟或flash上,就要編個目錄來說明每個檔案在什麼地方,有什麼屬性,及大小等。就像書本的目錄一樣,便於查詢和管理。這目錄是作業系統需要的,用來找檔案或叫管理檔案。許多作業系統都用到這個概念,如linux,某些嵌入式檔案系統等。當然,對...

linux檔案描述符

本文介紹了檔案描述符,1 首先說什麼是檔案描述符,它有什麼作用?檔案描述符是乙個簡單的整數,用以標明每乙個被程序所開啟的檔案和socket。基於檔案描述符的輸入輸出函式 open 開啟乙個檔案,並指定訪問該檔案的方式,呼叫成功後返回乙個檔案描述符。creat 開啟乙個檔案,如果該檔案不存在,則建立它...

linux檔案描述符

當某個程式開啟檔案時,作業系統返回相應的檔案描述符,程式為了處理該檔案必須引用此描述符。所謂的檔案描述符是乙個低階的正整數。最前面的三個檔案描述符 0,1,2 分別與標準輸入 stdin 標準輸出 stdout 和標準錯誤 stderr 對應。因此,函式 scanf 使用 stdin,而函式 pri...