# V2606. MISRA. There should be no attempt to write to a stream that has been opened for reading.

Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.

Это правило актуально только для С. Стандарт C не определяет поведение, при котором происходит запись в файл, открытый только для чтения. Поэтому такое поведение некорректно.

Рассмотрим пример:

    void foo(void)
    {
      FILE *file = fopen("file.txt", "r");
      if (file != NULL)
      {
        fputs(file, "I am writing to the read-only file\n");
        fclose(file);
      }
    }

Файл file.txt был открыт в режиме только для чтения, но при этом в него происходит запись. Неизвестно, как поведет себя операционная система в этой ситуации.

Скорее всего, это опечатка, и режим открытия стоит изменить:

    void foo(void)
    {
      FILE *file = fopen("file.txt", "w");
      if (file != NULL)
      {
        fputs(file, "I am writing to the write-only file\n");
        fclose(file);
      }
    }

Данная диагностика классифицируется как:

MISRA-C-2012-22.4 MISRA-C-2023-22.4