Ok, mkstemp
est le moyen préféré pour créer un fichier temporaire dans POSIX.Comment créer un fichier std :: ofstream dans un fichier temporaire?
Mais il ouvre le fichier et renvoie un int
, qui est un descripteur de fichier. De cela, je ne peux que créer un fichier *, mais pas un std::ofstream
, que je préférerais en C++. (Apparemment, sur AIX et d'autres systèmes, vous pouvez créer un std::ofstream
d'un descripteur de fichier, mais mon compilateur se plaint quand j'essayer.)
Je sais que je pourrais obtenir un nom de fichier temporaire avec tmpnam
puis ouvrir mon propre ofstream avec elle, mais c'est apparemment dangereux en raison des conditions de course, et les résultats dans un avertissement compilateur (g ++ v3.4 sur Linux.):
warning: the use of `tmpnam' is dangerous, better use `mkstemp'
Alors, est-il un moyen portable pour créer un std::ofstream
à une température fichier?
Cela ne compile pas avec mon g ++ v3.4.4 sous Linux. Apparemment, seules certaines plateformes ont cette fonction. – Frank
Merci! Pour votre seconde méthode (en utilisant mkstemp puis ofstream): Est-ce encore efficace en termes d'E/S? Cela va accéder au système de fichiers deux fois, non? Notre système de fichiers est super lent et je crains que cela ne lui impose un fardeau inutile. – Frank
strdup n'est pas portable, non plus ... – Sol