MISRA C:2012 Rule 22.4

Не должно быть никакой попытки записать в поток, который был открыт как только для чтения

Описание

Управляйте определением

Не должно быть никакой попытки записать в поток, который был открыт как только для чтения.

Объяснение

Стандарт не задает поведение, если попытка предпринята, чтобы записать в поток только для чтения.

Реализация Polyspace

Можно проверять на это правило с анализом Bug Finder только.

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

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

#include <stdio.h>

void func1(void) {
    FILE *fp1 = fopen("tmp.txt", "r");
    (void) fprintf(fp1, "Some text"); /* Non-compliant: Read-only stream */
    (void) fclose(fp1);
}

void func2(void) {
    FILE *fp2 = fopen("tmp.txt", "r+");
    (void) fprintf(fp2, "Some text"); /* Compliant */
    (void) fclose(fp2);
}

В этом примере поток файла сопоставлен с fp1 открыт как только для чтения. Правило нарушено, когда поток записан.

Проверяйте информацию

Группа: ресурсы
Категория: обязательный
Категория AGC: обязательный
Введенный в R2015b