tmpfile, tmpfile_s
|
Definido en el encabezado
<stdio.h>
|
||
|
FILE
*
tmpfile
(
void
)
;
|
(1) | |
|
errno_t tmpfile_s
(
FILE
*
restrict
*
restrict
streamptr
)
;
|
(2) | (desde C11) |
-
Como con todas las funciones con verificación de límites,
tmpfile_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> .
El archivo temporal creado por esta función se cierra y elimina cuando el programa termina normalmente. Si se elimina en caso de terminación anormal está definido por la implementación.
Contenidos |
Parámetros
Valor de retorno
Notas
En algunas implementaciones (por ejemplo, Linux antiguo), esta función realmente crea, abre y elimina inmediatamente el archivo del sistema de archivos: mientras un programa mantenga un descriptor de archivo abierto a un archivo eliminado, el archivo existe, pero como fue eliminado, su nombre no aparece en ningún directorio, por lo que ningún otro proceso puede abrirlo. Una vez que se cierra el descriptor de archivo, o una vez que el programa termina (normal o anormalmente), el espacio ocupado por el archivo es reclamado por el sistema de archivos. Linux más reciente (desde 3.11 o posterior, dependiendo del sistema de archivos) crea tales archivos temporales invisibles en un solo paso, mediante un flag especial en la llamada al sistema
open()
.
En algunas implementaciones (por ejemplo, Windows), se requieren privilegios elevados ya que la función puede crear el archivo temporal en un directorio del sistema.
Ejemplo
#define _POSIX_C_SOURCE 200112L #include <stdio.h> #include <unistd.h> int main(void) { printf("TMP_MAX = %d, FOPEN_MAX = %d\n", TMP_MAX, FOPEN_MAX); FILE* tmpf = tmpfile(); fputs("Hello, world", tmpf); rewind(tmpf); char buf[6]; fgets(buf, sizeof buf, tmpf); printf("got back from the file: '%s'\n", buf); // Linux-specific method to display the tmpfile name char fname[FILENAME_MAX], link[FILENAME_MAX] = {0}; sprintf(fname, "/proc/self/fd/%d", fileno(tmpf)); if (readlink(fname, link, sizeof link - 1) > 0) printf("File name: %s\n", link); }
Salida posible:
TMP_MAX = 238328, FOPEN_MAX = 16 got back from the file: 'Hello' File name: /tmp/tmpfjptPe5 (deleted)
Referencias
- Estándar C23 (ISO/IEC 9899:2024):
-
- 7.21.4.3 La función tmpfile (p: TBD)
-
- K.3.5.1.1 La función tmpfile_s (p: TBD)
- Estándar C17 (ISO/IEC 9899:2018):
-
- 7.21.4.3 La función tmpfile (p: 222)
-
- K.3.5.1.1 La función tmpfile_s (p: 427)
- Estándar C11 (ISO/IEC 9899:2011):
-
- 7.21.4.3 La función tmpfile (p: 303)
-
- K.3.5.1.1 La función tmpfile_s (p: 586-587)
- Estándar C99 (ISO/IEC 9899:1999):
-
- 7.19.4.3 La función tmpfile (p: 269)
- Estándar C89/C90 (ISO/IEC 9899:1990):
-
- 4.9.4.3 La función tmpfile
Véase también
|
(C11)
|
devuelve un nombre de archivo único
(función) |
|
Documentación de C++
para
tmpfile
|
|