Opening previously opened resource

Открытие уже открытого файла

Описание

Открытие ранее открытого ресурса проверяет на функции открытия файла, которые открывают уже открытый файл.

Риск

Если вы открываете ресурс многократно, можно столкнуться:

  • Состояние состязания при доступе к файлу.

  • Неопределенное или неожиданное поведение для того файла.

  • Мобильность выходит, когда вы запускаете свою программу на различных целях.

Фиксация

Если ресурс открыт, закройте ресурс перед повторным открытием.

Примеры

развернуть все

#include <stdio.h>
const char* logfile = "my_file.log";

void doubleresourceopen()
{
    FILE* fpa = fopen(logfile, "w");
    if (fpa == NULL) {
        return;
    }
    (void)fprintf(fpa, "Writing");
    FILE* fpb = fopen(logfile, "r");
    (void)fclose(fpa);
    (void)fclose(fpb);
}

В этом примере, logfile открыт в первой линии этой функции с привилегиями записи. На полпути через функцию, logfile открыт снова с привилегиями чтения.

Коррекция — закрывается перед повторным открытием

Одна возможная коррекция должна закрыть файл прежде, чем вновь открыть файл с различными привилегиями.

#include <stdio.h>
const char* logfile = "my_file.log";

void doubleresourceopen()
{
    FILE* fpa = fopen(logfile, "w");
    if (fpa == NULL) {
        return;
    }
    (void)fprintf(fpa, "Writing");
    (void)fclose(fpa);
    FILE* fpb = fopen(logfile, "r");
    (void)fclose(fpb);
}

Информация о результате

Группа: управление ресурсами
Язык: C | C++
Значение по умолчанию: на
Синтаксис командной строки: DOUBLE_RESOURCE_OPEN
Удар: носитель
ID CWE: 362, 413, 675

Введенный в R2017b