在C中没有fclose的fopen

如果我使用fopen打开一个文件很多次而不调用fclose发生什么?

可能出现任何缓冲区溢出问题?

如果你继续fopen没有fclose那么最终你未来对fopen调用将开始失败。 程序可用的文件描述符数量有限。

看到这个相关的SO问题 。

你浪费了底层的文件句柄。 请及时关闭您打开的所有文件,以避免资源泄漏。

如果您继续打开文件而不关闭文件,那么您将在某个时刻(在应用程序级别或操作系统级别)用完文件描述符,并且所有进一步尝试打开文件都将失败。

除了浪费其他人回答的流程文件描述符之外,您还会浪费内存,因为每个文件流都管理由libc内部分配的输入/输出缓冲区。

正如其他人所提到的,您不希望泄漏文件描述符。 但是可以多次打开一个文件。 文件描述符是独立的,不会相互干扰(假设您只是在阅读而不是写入文件)。

 #include  int main() { FILE* f1 = fopen("/tmp/foo.txt", "rb"); FILE* f2 = fopen("/tmp/foo.txt", "rb"); FILE* f3 = fopen("/tmp/foo.txt", "rb"); FILE* f4 = fopen("/tmp/foo.txt", "rb"); char buf1[32] = { 0, }; char buf2[32] = { 0, }; char buf3[32] = { 0, }; char buf4[32] = { 0, }; fread(buf1, 1, sizeof(buf1) - 1, f1); fread(buf2, 1, sizeof(buf2) - 1, f2); fread(buf3, 1, sizeof(buf3) - 1, f3); fread(buf4, 1, sizeof(buf4) - 1, f4); printf("buf1 = '%s'\n", buf1); printf("buf2 = '%s'\n", buf2); printf("buf3 = '%s'\n", buf3); printf("buf4 = '%s'\n", buf4); fclose(f1); fclose(f2); fclose(f3); fclose(f4); return 0; } 

输出如下:

 $ ./fopen buf1 = '0123456789ABCDEFGHIJ0123456789a' buf2 = '0123456789ABCDEFGHIJ0123456789a' buf3 = '0123456789ABCDEFGHIJ0123456789a' buf4 = '0123456789ABCDEFGHIJ0123456789a'