chaitanyavarma
chaitanyavarma

Reputation: 315

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 may arise?

Upvotes: 8

Views: 11482

Answers (5)

bstpierre
bstpierre

Reputation: 31206

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'

Upvotes: 1

Nikolai Fetissov
Nikolai Fetissov

Reputation: 84169

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.

Upvotes: 4

Brian R. Bondy
Brian R. Bondy

Reputation: 347216

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.

Upvotes: 16

Ignacio Vazquez-Abrams
Ignacio Vazquez-Abrams

Reputation: 798626

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.

Upvotes: 4

NT_
NT_

Reputation: 2670

You waste underlying file handles. Please close any files you open, in a timely fashion, as to avoid this leak of resources.

Upvotes: 6

Related Questions