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.
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
[[ISO/IEC 9899-1999:TC2]] Section 7.19.3, "Files"