...
If implemented, this reduces the space for unique names and increases the predictability of the resulting names. But in general, TR 24731-1 does not establish any criteria for predictability of names.
TR 24731-1 also notes that
After a program obtains a file name using the
tmpnam_s
function and before the program creates a file with that name, the possibility exists that someone else may create a file with that same name. To avoid this race condition, thetmpfile_s
function should be used instead oftmpnam_s
when possible. One situation that requires the use of thetmpnam_s
function is when the program needs to create a temporary directory rather than a temporary file.
Code Block | ||
---|---|---|
| ||
/* ... */
FILE *file_ptr;
char filename[L_tmpnam_s];
if (tmpnam_s(filename, L_tmpnam_s) != 0) {
/* Handle Error */
}
if (!fopen_s(&file_ptr, filename, "wb+ | ||
Code Block | ||
| ||
/* ... */
FILE *file_ptr;
char filename[L_tmpnam_s];
if (tmpnam_s(filename, L_tmpnam_s) != 0) {
/* Handle Error */
}
if (!fopen_s(&file_ptr, filename, "wb+")) {
/* Handle Error */
}
/* ... */
|
...
The file is opened for update with "wb+"
mode, which means "truncate to zero length or create binary file for update." To the extent that the underlying system supports the concepts, the file is opened with exclusive (non-shared) access and has a file permission that prevents other users on the system from accessing the file.
It should be possible to open at least TMP_MAX_S
temporary files during the lifetime of the program (this limit may be shared with tmpnam_s()
). The value of the macro TMP_MAX_S
is only required to be 25 by ISO/IEC TR 24731-1.
...
access and has a file permission that prevents other users on the system from accessing the file.
It should be possible to open at least TMP_MAX_S
temporary files during the lifetime of the program (this limit may be shared with tmpnam_s()
). The value of the macro TMP_MAX_S
is only required to be 25 by ISO/IEC TR 24731-1.
The tmpfile_s()
function is available on systems that support ISO/IEC TR 24731-1.
TR 24731-1 notes the following regarding the use of tmpfile_s instead of }}{{{}tmpnam_s:
After a program obtains a file name using the
tmpnam_s
function and before the program creates a file with that name, the possibility exists that someone else may create a file with that same name. To avoid this race condition, thetmpfile_s
function should be used instead oftmpnam_s
when possible. One situation that requires the use of thetmpnam_s
function is when the program needs to create a temporary directory rather than a temporary file.
Code Block | ||
---|---|---|
| ||
/* ... */ if (tmpfile_s(&file_ptr)) { /* Handle Error */ } /* ... */ |
...