Namespaces
Variants

std:: tmpfile

From cppreference.net
< cpp ‎ | io ‎ | c
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)
devuelve un directorio adecuado para archivos temporales
(función)