The ISO/IEC 9899-1999 C standard function
fopen() is typically used to open an existing file or create a new one. However,
fopen() does not provide a mechanism to determine if an existing file has been opened or a new file has been created. This may lead to a program overwriting or accessing an unintended file.
Non-Compliant Example 1
In this example, a file name is supplied to
fopen() to create and open for writing. However, there is no guarantee that the file referenced by
file_name does not exist prior to calling
fopen(). This may cause an unintended file to be overwritten.
Compliant Solution 1.
The ISO/IEC 9899-1999 C standard does not provide a mechanism to determine if an existing file has been opened or a new file has been created. However, the
open() function as defined by Open Group 04c is available on many platforms and provides such a mechanism. If the
O_EXCL flags are used together, the
open() function will fail if the file specified by
file_name already exists.