file *fp;
fp = fopen(path, "rb");
void videodecoder::release()
}
file *file;
file = fopen(file_str, mode);
同乙個執行緒有兩個物件分別開啟兩個檔案,第乙個物件videodecoder開啟fd是94, 用完後通過release函式呼叫fclose關閉, 但是這個釋放完成後沒有對fp沒有賦值為null.
這時候物件二mediasource同樣的方式開啟檔案, 分配的fd也剛好是94, 物件二需要進行seek, read等操作時候, videodecoder的release又被呼叫一次, 這時候悲劇發生了, videodecoder中的fp雖然被close了,但是還是通過release裡面close把fd為94的檔案給關閉了, 這個fd是ediasource裡面剛剛開啟的, 所以就seek, read操作都失敗, 用fileno(file)得到的mediasource中的fd也變成了-1.
所以最後解決辦法就超簡單, fp賦值為null即可.
void videodecoder::release()
}
檔案開啟關閉必須配對, 這個問題中, 同一執行緒開啟了兩個檔案,前乙個被釋放的時候,後乙個開啟的fd剛好用了前乙個fd.
open ,close 開啟 關閉檔案
open open 是乙個系統呼叫函式,用來開啟或建立乙個檔案,通過不同的oflag選項實現不同功能。使用時open 函式需要包含的標頭檔案 函式原型 int open const char pathname,int oflags int open const char pathname,int o...
檔案I O 開啟和關閉檔案
open 函式 你必須先用python內建的open 函式開啟乙個檔案,建立乙個file物件,相關的方法才可以呼叫它進行讀寫。語法 file object open file name access mode buffering 引數的細節如下 常用模式模式 描述r唯讀方式開啟 預設 rb二進位制格...
開啟關閉檔案和讀寫檔案
一 開啟和關閉檔案 int open char filename,int flags,mode t mode 開啟檔案 open函式將filename轉換為乙個檔案描述符 flags引數也可以是乙個或者更多位掩蓋的 mode引數指定了新檔案的訪問許可權位 int close int fd 關閉檔案 ...