tmpnam, tmpnam_s
|
Definido en el encabezado
<stdio.h>
|
||
|
char
*
tmpnam
(
char
*
filename
)
;
|
(1) | |
|
errno_t tmpnam_s
(
char
*
filename_s, rsize_t maxsize
)
;
|
(2) | (desde C11) |
|
#define TMP_MAX /*unspecified*/
|
||
|
#define TMP_MAX_S /*unspecified*/
|
(desde C11) | |
|
#define L_tmpnam /*unspecified*/
|
||
|
#define L_tmpnam_s /*unspecified*/
|
(desde C11) | |
-
- filename_s es un puntero nulo
- maxsize es mayor que RSIZE_MAX
- maxsize es menor que la cadena del nombre de archivo generado
-
Como con todas las funciones con verificación de límites,
tmpnam_ssolo está garantizada su disponibilidad si __STDC_LIB_EXT1__ está definido por la implementación y si el usuario define __STDC_WANT_LIB_EXT1__ como la constante entera 1 antes de incluir <stdio.h> .
tmpnam y tmpnam_s modifican estado estático (que puede ser compartido entre estas funciones) y no requieren ser seguras para hilos.
Contenidos |
Parámetros
| filename | - | puntero al arreglo de caracteres capaz de contener al menos L_tmpnam bytes, para ser usado como búfer de resultado. Si se pasa un puntero nulo, se devuelve un puntero a un búfer interno estático. |
| filename_s | - | puntero al arreglo de caracteres capaz de contener al menos L_tmpnam_s bytes, para ser usado como búfer de resultado. |
| maxsize | - |
número máximo de caracteres que la función puede escribir (normalmente el tamaño del arreglo
filename_s
).
|
Valor de retorno
Notas
Aunque los nombres generados por
tmpnam
son difíciles de adivinar, es posible que un archivo con ese nombre sea creado por otro proceso entre el momento en que
tmpnam
retorna y el momento en que este programa intenta usar el nombre devuelto para crear un archivo. La función estándar
tmpfile
y la función POSIX
mkstemp
no tienen este problema (crear un directorio único usando solo la biblioteca estándar de C todavía requiere el uso de
tmpnam
).
Los sistemas POSIX definen adicionalmente la función de nombre similar
tempnam
, que ofrece la opción de un directorio (que por defecto es el macro opcionalmente definido
P_tmpdir
).
Ejemplo
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { // Nota: el compilador/enlazador puede emitir una advertencia de seguridad, ej. GCC: // "warning: el uso de `tmpnam' es peligroso, es mejor usar `mkstemp'" char* name1 = tmpnam(NULL); printf("temporary file name: %s\n", name1); char name2[L_tmpnam]; if (tmpnam(name2)) printf("temporary file name: %s\n", name2); // POSIX ofrece mkstemp. La siguiente declaración podría ser // necesaria ya que mkstemp está ausente en el estándar C <stdlib.h>. int mkstemp(char*); char name3[] = "/tmp/fileXXXXXX"; // se requieren al menos seis 'X' ^_^ int file_descriptor = mkstemp(name3); if (file_descriptor != -1) printf("temporary file name: %s\n", name3); else perror("mkstemp"); }
Salida posible:
temporary file name: /tmp/file90dLlR temporary file name: /tmp/fileY9LWAg temporary file name: /tmp/filexgv8PF
Referencias
- Estándar C23 (ISO/IEC 9899:2024):
-
- 7.21.4.4 La función tmpnam (p: TBD)
-
- K.3.5.1.2 La función tmpnam_s (p: TBD)
- Estándar C17 (ISO/IEC 9899:2018):
-
- 7.21.4.4 La función tmpnam (p: 222)
-
- K.3.5.1.2 La función tmpnam_s (p: 427-428)
- Estándar C11 (ISO/IEC 9899:2011):
-
- 7.21.4.4 La función tmpnam (p: 303-304)
-
- K.3.5.1.2 La función tmpnam_s (p: 587-588)
- Estándar C99 (ISO/IEC 9899:1999):
-
- 7.19.4.4 La función tmpnam (p: 269-270)
- Estándar C89/C90 (ISO/IEC 9899:1990):
-
- 4.9.4.4 La función tmpnam
Véase también
|
(C11)
|
devuelve un puntero a un archivo temporal
(función) |
|
C++ documentation
para
tmpnam
|
|