De acuerdo, mkstemp
es la forma preferida de crear un archivo temporal en POSIX.¿Cómo crear un std :: ofstream en un archivo temporal?
Pero abre el archivo y devuelve un int
, que es un descriptor de archivo. De eso solo puedo crear un ARCHIVO *, pero no un std::ofstream
, que preferiría en C++. (Al parecer, en AIX y algunos otros sistemas, se puede crear un std::ofstream
de un descriptor de archivo, pero mi compilador se queja cuando intento eso.)
Sé que podría obtener un nombre de archivo temporal con tmpnam
y luego abrir mi propio ofstream con ella, pero eso es al parecer insegura debido a las condiciones de carrera, y da como resultado un compilador de advertencia (g ++ v3.4 en Linux.):
warning: the use of `tmpnam' is dangerous, better use `mkstemp'
Así que, ¿hay alguna manera portátil para crear un std::ofstream
a una temperatura ¿archivo?
Eso no se compila con mi g ++ v3.4.4 en Linux. Aparentemente solo algunas plataformas tienen esa función. – Frank
¡Gracias! Para su segundo método (usando mkstemp y luego ofstream): ¿Sigue siendo eficiente en términos de E/S? Eso accederá al sistema de archivos dos veces, ¿verdad? Nuestro sistema de archivos es super lento y me preocupa que le imponga una carga innecesaria. – Frank
strdup no es portátil, tampoco ... – Sol