fopen без fclose в C

Что происходит, если я открываю использование файла fopen некоторое n количество раз без вызова fclose на нем?

Какие-либо проблемы переполнения буфера могут возникнуть?

6
задан Marcelo Cantos 28 July 2010 в 13:24
поделиться

5 ответов

Если вы продолжите fopen без fclose , то в конечном итоге ваши будущие вызовы fopen начнут давать сбой. Для вашей программы доступно ограниченное количество файловых дескрипторов.

См. Соответствующий вопрос SO .

13
ответ дан 8 December 2019 в 05:19
поделиться

Помимо бесполезной траты файловых дескрипторов для процесса, как ответили другие, вы также потратите впустую память , поскольку каждый файловый поток управляет буферами ввода / вывода, которые распределяются внутри libc .

1
ответ дан 8 December 2019 в 05:19
поделиться

Как уже упоминалось, вы не хотите утечки файловых дескрипторов. Но нормально, чтобы один файл открывался несколько раз. Дескрипторы файлов независимы и не будут мешать друг другу (при условии, что вы просто читаете, а не записываете в файл).

#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;
}

Выдает следующий результат:

$ ./fopen 
buf1 = '0123456789ABCDEFGHIJ0123456789a'
buf2 = '0123456789ABCDEFGHIJ0123456789a'
buf3 = '0123456789ABCDEFGHIJ0123456789a'
buf4 = '0123456789ABCDEFGHIJ0123456789a'
1
ответ дан 8 December 2019 в 05:19
поделиться

Вы тратите впустую базовые дескрипторы файлов. Пожалуйста, закройте все открытые файлы своевременно, чтобы избежать утечки ресурсов.

6
ответ дан 8 December 2019 в 05:19
поделиться

Если вы продолжите открывать файлы, не закрывая их, то в какой-то момент у вас закончатся файловые дескрипторы, либо на уровне приложения, либо на уровне ОС, и все дальнейшие попытки открыть файл потерпят неудачу. .

2
ответ дан 8 December 2019 в 05:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: