解析linux中的檔案描述符

2021-07-22 04:05:58 字數 1108 閱讀 9009

一、檔案描述符簡介

檔案描述符在形式上是乙個非負整數。實際上,它是乙個索引值,指向核心為每乙個程序所維護的該程序開啟檔案的記錄表。當程式開啟乙個現有檔案或者建立乙個新檔案時,核心向程序返回乙個檔案描述符。在程式設計中,一些涉及底層的程式編寫往往會圍繞著檔案描述符展開。習慣上,標準輸入的檔案描述符是 0,標準輸出是 1,標準錯誤是 2。

畫圖表示

二、如何建立檔案描述符

程序獲取檔案描述符最常見的方法是通過本機子例程open或create獲取或者通過從父程序繼承。fork建立出來的子程序會繼承父程序的檔案描述符表

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

檔案描述符:在linux系統中開啟檔案就會獲得檔案描述符,它是個很小的正整數。每個程序在pcb(process control block)中儲存著乙份檔案描述符表,檔案描述符就是這個表的索引,每個表項都有乙個指向已開啟檔案的指標。檔案指標:c語言中使用檔案指標做為i/o的控制代碼。檔案指標指向程序使用者區中的乙個被稱為file結構的資料結構。file結構包括乙個緩衝區和乙個檔案描述符。所以兩者之間是層級關係。

四、檔案描述符的分配原則

最小的未被使用的檔案描述符給剛開啟的檔案。

例子:將2號檔案描述符close掉,開啟乙個檔案,那麼此時該檔案的檔案描述符就是1。下面我們來驗證一下。

close(1);

const char*buff="hello world";

int fd=open("1.log",o_creat|o_wronly,0664);

if(fd<0)

printf("%s",buff);

輸出:

可見printf()並沒有輸出到螢幕上,而是輸出到了檔案中去。

解釋一下:printf原先是輸出到標準輸出流中去的,而此時fd此時為1,是檔案1.log的檔案描述符。即標準輸出流的位置被換成了檔案1.log,所以printf輸出到了檔案中去

Linux中的檔案描述符

在linux系統中一切皆可以看成是檔案,檔案又可分為 普通檔案 目錄檔案 鏈結檔案和裝置檔案。檔案描述符 file descriptor 是核心為了高效管理已被開啟的檔案所建立的索引,其是乙個非負整數 通常是小整數 用於指代被開啟的檔案,所有執行i o操作的系統呼叫都通過檔案描述符。程式剛剛啟動的時...

linux檔案描述符

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

linux檔案描述符

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