linux檔案描述符

2021-07-25 20:29:25 字數 1391 閱讀 2793

當某個程式開啟檔案時,作業系統返回相應的檔案描述符,程式為了處理該檔案必須引用此描述符。所謂的檔案描述符是乙個低階的正整數。最前面的三個檔案描述符(0,1,2)分別與標準輸入(stdin),標準輸出(stdout)和標準錯誤(stderr)對應。因此,函式 scanf() 使用 stdin,而函式 printf() 使用 stdout。你可以用不同的檔案描述符改寫預設的設定並重定向程序的 i/o 到不同的檔案。

1、首先說什麼是檔案描述符,它有什麼作用?

檔案描述符是乙個簡單的整數,用以標明每乙個被程序所開啟的檔案和socket。第乙個開啟的檔案是0,第二個是1,依此類推。unix 作業系統通常給每個程序能開啟的檔案數量強加乙個限制。更甚的是,unix 通常有乙個系統級的限制。

因為squid 的工作方式,檔案描述符的限制可能會極大的影響效能。當squid 用完所有的檔案描述符後,它不能接收使用者新的連線。也就是說,用完檔案描述符導致拒絕服務。直到一部分當前請求完成,相應的檔案和socket 被關閉,squid 不能接收新請求。當squid發現檔案描述符短缺時,它會發布警告。

在執行./configure 之前,檢查你的系統的檔案描述符限制是否合適,能給你避免一些麻煩。大多數情況下,1024 個檔案描述符足夠了。非常忙的cache可能需要4096或更多

基於檔案描述符的輸入輸出函式:

open:開啟乙個檔案,並指定訪問該檔案的方式,呼叫成功後返回乙個檔案描述符。

creat:開啟乙個檔案,如果該檔案不存在,則建立它,呼叫成功後返回乙個檔案描述符。

close:關閉檔案,程序對檔案所加的鎖全都被釋放。

read:從檔案描述符對應的檔案中讀取資料,呼叫成功後返回讀出的位元組數。

write:向檔案描述符對應的檔案中寫入資料,呼叫成功後返回寫入的位元組數。

ftruncate:把檔案描述符對應的檔案縮短到指定的長度,呼叫成功後返回0。

lseek:在檔案描述符對應的檔案裡把檔案指標設定到指定的位置,呼叫成功後返回新指標的位置。

fsync:將所有已寫入檔案中的資料真正寫到磁碟或其他下層裝置上,呼叫成功後返回0。

fstat:返回檔案描述符對應的檔案的相關資訊,把結果儲存在struct stat中,呼叫成功後返回0。

fchown:改變與開啟檔案相關聯的所有者和所有組,呼叫成功後返回0。

fchmod:把檔案描述符對應的檔案的許可權位改為指定的八進位制模式,呼叫成功後返回0。

flock:用於向檔案描述符對應的檔案施加建議性鎖,呼叫成功後返回0。

fcntl:既能施加建議性鎖也能施加強制性鎖,能建立記錄鎖、讀取鎖和寫入鎖,呼叫成功後返回0。

dup:複製檔案描述符,返回沒使用的檔案描述符中最小的編號。

dup2:由使用者指定返回的檔案描述符的值,用來重新開啟或重定向乙個檔案描述符。

select:同時從多個檔案描述符讀取資料或向多個檔案描述符寫入資料

linux檔案描述符

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

Linux 檔案描述符

我們之前就知道在linux作業系統下 一切皆檔案 所以在這個條件下,所有研究的物件都變相的相當於研究檔案,那麼對檔案系統的研究也應該是必須的。我們的核心利用檔案描述符來訪問檔案,每個檔案描述符都是非負整數,開啟現存的檔案或者是新建檔案時,核心會返回乙個檔案描述符,讀寫檔案也需要使用檔案描述符來指定待...

Linux檔案描述符

在linux通用i o模型中,i o操作系列函式 系統呼叫 都是圍繞乙個叫做檔案描述符的整數展開。這不禁讓人產生疑問 這個整數代表什麼?乙個數值代表乙個檔案嗎?隨便傳乙個整數進去呼叫可以嗎?玩轉linux舊群已滿,新群 278378501 解答以上疑問,需要更深入學習 檔案描述符 file desc...