fopen without fclose in C
What happens if i open a file using fopen
some n number of times without calling fclose
on it?
Any buffer overrun issues m开发者_运维技巧ay arise?
If you continue to fopen
without fclose
then eventually your future calls to fopen
will start to fail. There are a limited number of file descriptors available to your program.
See this related SO question.
You waste underlying file handles. Please close any files you open, in a timely fashion, as to avoid this leak of resources.
If you continue opening files without closing them then you will run out of file descriptors at some point, either at the application level or the OS level, and all further attempts to open a file will fail.
Aside from wasting file descriptors for the process as others answered, you would also waste memory since each file stream manages in/out buffers that are allocated internally by libc
.
As others have mentioned, you don't want to leak file descriptors. But it is ok to have a single file open multiple times. The file descriptors are independent and will not interfere with each other (assuming you are just reading and not writing to the file).
#include <stdio.h>
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;
}
Gives output like:
$ ./fopen
buf1 = '0123456789ABCDEFGHIJ0123456789a'
buf2 = '0123456789ABCDEFGHIJ0123456789a'
buf3 = '0123456789ABCDEFGHIJ0123456789a'
buf4 = '0123456789ABCDEFGHIJ0123456789a'
精彩评论