檔案描述符和檔案指標的區別

2021-10-07 14:01:43 字數 1548 閱讀 4730

檔案描述符是電腦科學中的乙個術語,是乙個用於表述只想檔案的引用的抽象化概念。

在linux當中,每個程序會在程序控制塊(pcb)當中儲存著乙份檔案描述符表,檔案描述符就是這個表的索引,每個表都有乙個指向已經開啟檔案的指標。

每個linux程序都應該有三個標準的檔案描述符,對應三個標準流。

整數值名稱

(unistd.h)符號常量

(stdio.h)檔案流

0standard input

stdin_fileno

stdin

1standard output

stdout_fileno

stdout

2standard error

stderr_fileno

stderr

檔案描述符在形式上是乙個非負整數,實際上,它是乙個索引值,指向核心為每乙個程序所維護的該程序開啟檔案的記錄表。當程式開啟乙個現有檔案或者建立乙個新檔案時,核心向程序返回乙個檔案描述符。在程式設計中,一些涉及底層的程式編寫往往會圍繞著檔案描述符展開。但是檔案描述符這一概念往往只適用於unix、linux這樣的作業系統。

正因為對於linux來說,一切皆是檔案的思想,所以,檔案描述符為該系列平台上進行裝置相關的變成實際上提供了統一的方法。

注意:

檔案描述符只有在linux下記為0,1,2,在其他系統是不一樣的,例如在windows系統下,檔案描述符和訊號量、互斥鎖等核心物件一樣都記作handle。所以檔案描述符的概念只在linux和unix系統上可以用來使用。

功能操作

檔案描述符生成

open()、socket()、pipe()等

與單一檔案描述符相關的操作

read()、write()、send()、fchmod()等

與複數檔案描述符相關的操作

select()、poll()等

與檔案描述符表相關度的操作

close()、dup()等

檔案指標是c語言當中我們所學習的東西,c語言當中用乙個指標變數指向乙個檔案,這個指標就被稱為檔案指標。通過檔案指標我們可以對所指的檔案進行各種的操作。c語言當中使用的是檔案指標而不是檔案描述符做為i/o的控制代碼。檔案指標指向程序使用者區中的乙個被稱為file結構的資料結構。file結構包含乙個緩衝區和乙個檔案描述符。

檔案指標式c語言的通用的格式,所以相對來說,更加便於移植。

我們通常來獲取檔案指標:

file * fp=fopen("test.txt","r");

獲取到指標以後,我們就可以獲得指標當中檔案描述符的資訊。

檔案描述符是唯一的,但是檔案指標不是唯一的,檔案指標指向的物件是唯一的。

int fileno(file *stream);

file *fdopen(int fd, const

char *mode);

fdopen第乙個引數是乙個開啟的檔案描述符,mode是表示開啟方式的字串,和fopen相同,比如說「w」或者「r」。

fileno函式,它返回和檔案流對應的檔案描述符,失敗返回-1。

檔案描述符和檔案指標區別

int fileno file stream 返回stream對應的檔案描述符。file fdopen int filedes,const char mode 從檔案描述符fd 到檔案流 file 的函式 檔案描述符,在linux系統中,裝置也是以檔案的形式存在,要對該裝置進行操作就必須先開啟這個檔...

檔案描述符和檔案指標的區別

檔案描述符 在linux系統中開啟檔案就會獲得檔案描述符,它是個很小的正整數。每個程序在pcb process control block 中儲存著乙份檔案描述符表,檔案描述符就是這個表的索引,每個表項都有乙個指向已開啟檔案的指標。檔案指標 c語言中使用檔案指標做為i o的控制代碼。檔案指標指向程序...

檔案描述符和檔案指標的區別

檔案描述符就是open檔案時產生的乙個整數,直到乙個索引作用,它用於unix系統中,用於標識檔案。檔案指標是指向乙個file的結構體,這個結構體裡有乙個元素就是檔案描述符。它用於ansi c標準的io庫呼叫中,用於標識檔案。既然file中包含檔案描述符元素,可以用fopen 直接獲取指標fp,然後使...