簡體   English   中英

不關閉使用open或fopen打開的文件有什么影響

[英]What is the effect of not closing a file opened with open or fopen

為了使問題更清楚:

[情況1]

#include <stdio.h>
int main ()  {
    FILE* file = fopen("myfile.txt", "r");
    return 0;
}

[案例2]

#include <stdio.h>
int main () {
    int fd = open("myfile.txt", O_RDONLY);
    return 0;
}

如果兩個示例均未正確關閉文件,會發生什么情況? 緩沖區是否已刷新到文件中? 我假設文件至少會自動關閉...對嗎?

fopen是C庫函數。 尚不清楚如何實現。 [ 更正: ]如果從main返回,則所有打開的文件流都將為您關閉(例如C11 7.21.3 / 5),但是如果程序以其他方式(例如通過信號,如通過abort )退出,則不需要這樣做。

您的底層OS實現當然會在進程終止時正確清理所有內容,但這僅涉及系統的全局狀態(例如,將釋放與進程關聯的所有虛擬內存,並關閉所有文件描述符,等等。)。 例如,如果C庫實現了自己的寫緩沖區,則沒有理由在每種情況下都會自動對其進行刷新(盡管通過從main返回正常退出是可以的)。

這也可以解決您的情況2:如果您直接使用OS功能(例如Posix open調用),則可以確保在進程退出時將關閉這些文件描述符。

是。 程序終止之前,所有打開的文件都已關閉。

(C99,7.19.3p5)“如果主函數返回到其原始調用者,或者如果調用了退出函數,則在程序終止之前,所有打開的文件都將關閉(因此將清除所有輸出流)。”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM