std:: tmpfile
| I/O manipulators | ||||
| Print functions (C++23) | ||||
| C-style I/O | ||||
| Buffers | ||||
|
(C++23)
|
||||
|
(
C++98/26*
)
|
||||
|
(C++20)
|
||||
| Streams | ||||
| Abstractions | ||||
| File I/O | ||||
| String I/O | ||||
| Array I/O | ||||
|
(C++23)
|
||||
|
(C++23)
|
||||
|
(C++23)
|
||||
|
(
C++98/26*
)
|
||||
|
(
C++98/26*
)
|
||||
|
(
C++98/26*
)
|
||||
| Synchronized Output | ||||
|
(C++20)
|
||||
| Types | ||||
| Error category interface | ||||
|
(C++11)
|
||||
|
(C++11)
|
| Types and objects | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Functions | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definido en el encabezado
<cstdio>
|
||
|
std::
FILE
*
tmpfile
(
)
;
|
||
Crea y abre un archivo temporal con un nombre de archivo único generado automáticamente.
El archivo se abre como un archivo binario para actualización (como con std::fopen con modo de acceso "wb+" ). Al menos TMP_MAX archivos pueden abrirse durante la vida útil de un programa (este límite puede compartirse con std::tmpnam y puede estar más limitado por FOPEN_MAX ).
Si el programa cierra el archivo, por ejemplo ejecutando std::fclose , el archivo se elimina automáticamente.
Si el programa termina normalmente (llamando a
std::exit
, retornando desde
main
, etc.), todos los archivos que fueron abiertos llamando a
std::tmpfile
también se eliminan automáticamente.
Si el programa termina de forma anormal, está definido por la implementación si estos archivos temporales se eliminan.
Contenidos |
Parámetros
(ninguno)
Valor de retorno
El flujo de archivo asociado o un puntero nulo si ha ocurrido un error.
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 hacia un archivo eliminado, el archivo existe, pero como fue eliminado, su nombre no aparece en ningún directorio, de modo 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
#include <cstdio> #include <cstdlib> #include <filesystem> #include <iostream> namespace fs = std::filesystem; int main() { std::cout << "TMP_MAX = " << TMP_MAX << '\n' << "FOPEN_MAX = " << FOPEN_MAX << '\n'; std::FILE* tmpf = std::tmpfile(); std::fputs("Hello, world", tmpf); std::rewind(tmpf); char buf[6]; std::fgets(buf, sizeof buf, tmpf); std::cout << buf << '\n'; // Linux-specific method to display the tmpfile name std::cout << fs::read_symlink( fs::path("/proc/self/fd") / std::to_string(fileno(tmpf)) ) << '\n'; }
Salida posible:
TMP_MAX = 238328 FOPEN_MAX = 16 Hello "/tmp/tmpfBlY1lI (deleted)"
Véase también
|
devuelve un nombre de archivo único
(función) |
|
|
(C++17)
|
devuelve un directorio adecuado para archivos temporales
(función) |
|
Documentación de C
para
tmpfile
|
|