Ok, mkstemp
è il modo preferito per creare un file temporaneo in POSIX.Come creare un file std :: ofstream in un file temporaneo?
Ma apre il file e restituisce un int
, che è un descrittore di file. Da quello posso solo creare un FILE *, ma non uno std::ofstream
, che preferirei in C++. (A quanto pare, su AIX e altri sistemi, è possibile creare un std::ofstream
da un descrittore di file, ma il mio compilatore si lamenta quando provo questo.)
So che avrei potuto ottenere un nome di file temporaneo con tmpnam
e quindi aprire la mia ofstream con esso, ma questo è a quanto pare non sicuri a causa di condizioni di gara, e si traduce in un compilatore di avviso (g v3.4 ++ su Linux.):
warning: the use of `tmpnam' is dangerous, better use `mkstemp'
Quindi, c'è un modo portatile per creare un std::ofstream
ad una temperatura file?
Questo non viene compilato con il mio g ++ v3.4.4 su Linux. Apparentemente solo alcune piattaforme hanno questa funzione. – Frank
Grazie! Per il tuo secondo metodo (usando mkstemp e poi ofstream): è ancora efficiente in termini di I/O? Questo accederà al file system due volte, giusto? Il nostro file system è molto lento e temo che ciò comporterà un carico inutile. – Frank
strdup non è portatile, o ... – Sol