多次flose fp 會怎樣?

2021-07-05 18:44:23 字數 477 閱讀 2361

能不能多次對同乙個檔案描述符呼叫fclose?答案是不行的。為啥不行,我們需要看看fclose到底幹了什麼

fclose關閉的是乙個檔案流,當呼叫fclose時,將會使使用者態(c庫)緩衝區中的資料重新整理到核心區域(或通過socket傳送,或者僅僅寫回硬碟)。

於此同時,fclose會呼叫free來釋放fp所指向的使用者態buffer。

因此,如果多次呼叫fclose,會多次呼叫free來釋放一塊已經被釋放的區域,而這個動作是危險的。

很多解釋是說,因為一旦被釋放之後,這塊區域就屬於未知區域。有可能系統已經把該區域分給了其他程序,所以不能多次fclose。

但是我看過linux關於close的核心原始碼,發現並不是這樣,當第一次呼叫close時,將會把對應的檔案描述符陣列flip[fp] = null。如果再呼叫close時,會在前面判斷該項是否為null,如果為null,return -einval;因此,多次呼叫fclose時會報錯,但不會影響系統其他程序。

未來會怎樣

伴隨visual studio 2008 的發布,net 3.5也一起來了,j2ee風采依舊,python風頭正勁,未來會怎樣?我們究竟要學多少新的東西才能不被日新月異的技術浪頭打沉在海底?或許本不應該為了技術而技術。qq不也很成功麼,易趣 之流不也很成功麼,支援他們業務的技術也並不是諸如人工智慧之...

會聲會影怎樣定格字幕

製作定格字幕主要有一下三種方法 1 標題動畫 會聲會影標題動畫中的除了縮放和下降,其他的效果都可以設定暫停,暫停的時間可以選擇 短,中,長或自定義,通過移動左側預覽框下的滑塊來調整暫停的時間。2 自定義動作 如果需要製作移動到中間暫停一段時間,然後接著運動,可以使用自定義動作進行設定,在中間兩個點之...

Redis 記憶體用完會怎樣?

在某些極端情況下,軟體為了能正常執行會做一些保護性的措施,比如執行記憶體超過最大值之後的處理,以及鍵值過期之後的處理等,都屬於此類問題,而專業而全面的回答這些問題恰好是乙個工程師所具備的優秀品質。我們本文的面試題是 redis 記憶體用完之後會怎麼?redis 的記憶體用完指的是 redis 的執行...