Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

The behavior when simultaneously opening a file multiple times is implementation defined. On some platforms, this is not allowed. On others, it might result in race conditions.

Non-Compliant Coding Example

The following non-compliant code write logs about the programs state at runtime.

...

However, it opens the file log twice simultaneously. As stated above, the result is implementation defined and dangerous.

Compliant Solution

In this compliant solution, a reference to the file pointer is passed around so that the file does not have to be opened twice separately.

Code Block
bgColor#ccccff
void do_stuff(FILE **file) {
  FILE* logfile = *file;
  
  /* Check for errors, write logs pertaining to do_stuff, etc. */
}

int main() {
  FILE* logfile = fopen("log", "a");

  /* Check for errors, write logs pertaining to main, etc. */

  do_stuff(&logfile)

  /* ... */
}

Risk Assessment

Simultaneously opening a file multiple times could result in abnormal program termination or a data integrity violation.

Rule

Severity

Likelihood

Remediation Cost

Priority

Level

FIO08-A

2 (medium)

2 (probable)

2 (medium)

P8

L2

References

Wiki Markup
\[[ISO/IEC 9899-1999:TC2|AA. C References#ISO/IEC 9899-1999TC2]\] Section 7.19.3, "Files"