Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: compliant solution involving GNU's "x"

...

Wiki Markup
Care should be observed when using {{O_EXCL}} with remote file systems as it does not work with NFS version 2. NFS version 3 added support for {{O_EXCL}} mode in {{open()}}; see IETF RFC 1813, in particular the {{EXCLUSIVE}} value to the {{mode}} argument of {{CREATE}} \[[Callaghan 95|AA. C References#Callaghan 95]\].

Compliant Solution: fopen() (GNU)

Wiki Markup
Section 12.3 of the GNU C Library says: \[[Loosemore 07|AA. C References#Loosemore 07]\]

The GNU C library defines one additional character for use in opentype: the character `x' insists on creating a new file—if a file filename already exists, fopen fails rather than opening it. If you use `x' you are guaranteed that you will not clobber an existing file. This is equivalent to the O_EXCL option to the open function.

Code Block
bgColor#ccccff

FILE *fp = fopen(file_name,"wx");
if (!fp) {
  /* Handle Error */
}

Use of this non portable extension can allow for easy remediation of legacy code.

Compliant Solution: fdopen() (POSIX)

Wiki Markup
For code that operates on {{FILE}} pointers and not file descriptors, the POSIX {{fdopen()}} function \[[Open Group 04|AA. C References#Open Group 05]\] can be used to associate an open stream with the file descriptor returned by {{open()}}, as shown in this compliant solution.

...

Wiki Markup
\[[ISO/IEC 9899:1999|AA. C References#ISO/IEC 9899-1999]\] Section 7.19.3, "Files," and Section 7.19.4, "Operations on Files"
\[[ISO/IEC TR 24731-1:2007|AA. C References#SO/IEC TR 24731-1-2007]\] Section 6.5.2.1, "The fopen_s function"
\[[Loosemore 07|AA. C References#Loosemore 07]\] [Section 12.3, "Opening Streams"|http://www.gnu.org/software/libc/manual/html_node/Opening-Streams.html]
\[[Open Group 04|AA. C References#Open Group 04]\]
\[[Seacord 05|AA. C References#Seacord 05]\] Chapter 7, "File I/O"

...