在檔案i/o中,要從乙個檔案讀取資料,應用程式首先要呼叫作業系統函式並傳送檔名,並選乙個到該檔案的路徑來開啟檔案。該函式取回乙個順序號,即檔案控制代碼(file handle),該檔案控制代碼對於開啟的檔案是唯一的識別依據。要從檔案中讀取一塊資料,應用程式需要呼叫函式readfile,並將檔案控制代碼在記憶體中的位址和要拷貝的位元組數傳送給作業系統。當完成任務後,再通過呼叫系統函式來關閉該檔案。
檔案控制代碼是windows裡面的叫法,檔案描述符是linux裡面的叫法。其實兩者是同樣的概念。
linux 程序最多能夠開啟的檔案控制代碼數(這裡的檔案控制代碼數包括socket數,從網路讀取資料也是另外一種檔案讀取方式)是有限制的,超過了這個限制,應用程式就會丟擲異常(too many open files.)。在android 上,最大的數量一般都是1024,但一些定製的rom可能會有一些差別。另外,有乙個概念需要先明確,檔案控制代碼數,並不是開啟的檔案數。因為乙個檔案即使被開啟,也可能沒有檔案描述符。
那麼遇到問題的時候,如何獲取某個程序的檔案控制代碼數呢?通常的分析手法如下(**:
(1). 確定是哪類檔案開啟太多,沒有關閉.
(2). 確定此類檔案是在**開啟.
(3). 暴力確定檔案開啟的位置
(4). 修正
控制代碼和檔案描述符
控制代碼是windows下的概念。控制代碼是windows下各種物件的識別符號,比如檔案 也許叫文件比較合適一點 資源 選單 游標 點陣圖等。檔案控制代碼和檔案描述符類似,它也是乙個非負整數,也用於定位檔案資料在記憶體中的位置。由於linux下所有東西都被看成是檔案,比如檔案 也許叫文件比較合適一點...
談」控制代碼洩漏「
洩漏 是我們寫程式的人老生常談的乙個話題。最為常見的就是記憶體洩漏 memory leak 本文介紹一種新的洩漏 控制代碼洩漏 handle leak 在windows系統的程式中,我們經常會遇到控制代碼這個詞,而且windows也抽象出了一種控制代碼型別handle。在unix系統的系統中,控制代...
談」控制代碼洩漏」
洩漏 是我們寫程式的人老生常談的乙個話題。最為常見的就是記憶體洩漏 memory leak 本文介紹一種新的洩漏 控制代碼洩漏 handle leak 在windows系統的程式中,我們經常會遇到控制代碼這個詞,而且windows也抽象出了一種控制代碼型別handle。在unix系統的系統中,控制代...