Comment créer un fichier temporaire pour écrire en C ++ sur une plate-forme Linux?

StackOverflow https://stackoverflow.com/questions/159983

  •  03-07-2019
  •  | 
  •  

Question

En C ++, sous Linux, comment puis-je écrire une fonction pour renvoyer un nom de fichier temporaire que je peux ensuite ouvrir en écriture?

Le nom du fichier doit être aussi unique que possible, afin qu'un autre processus utilisant la même fonction ne reçoive pas le même nom.

Était-ce utile?

La solution

Utilisez l'une des bibliothèques standard " mktemp " fonctions: mktemp / mkstemp / mkstemps / mkdtemp.

Edit: plain mktemp peut ne pas être sûr - mkstemp est préférable.

Autres conseils

tmpnam (), ou tout ce qui vous donne un nom va être vulnérable aux conditions de concurrence. Utilisez quelque chose conçu à cet effet qui renvoie un descripteur, tel que tmpfile ():

   #include <stdio.h>

   FILE *tmpfile(void);

Le manuel GNU libc décrit les différentes options disponibles et leurs mises en garde:

http://www.gnu.org/s /libc/manual/html_node/Temporary-Files.html

En résumé, seuls mkstemp () ou tmpfile () doivent être utilisés, comme d'autres l'ont déjà mentionné.

man tmpfile

  

La fonction tmpfile () ouvre un fichier temporaire unique en binaire          mode lecture / écriture (w + b). Le fichier sera automatiquement supprimé quand il          est fermé ou le programme se termine.ote

mktemp devrait fonctionner ou utiliser l'une des nombreuses bibliothèques disponibles pour générer un UUID.

La fonction tmpnam () dans la bibliothèque standard C est conçu pour résoudre ce problème. Il existe également tmpfile (), qui renvoie un descripteur de fichier ouvert (et le supprime automatiquement lorsque vous le fermez).

Vous devriez simplement vérifier si le fichier que vous essayez d'écrire existe déjà. C'est un problème bloquant. Les fichiers ont également des propriétaires. Ainsi, si vous le faites correctement, le mauvais processus ne pourra pas y écrire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top