Question

Je dois utiliser la fonction tmpnam en C ++, mais je dois savoir sur la sécurité des threads. A savoir, si j'ai plusieurs fils qui aura chaque besoin d'acquérir un nom différent pour un fichier temporaire, suis-je garanti que chaque thread recevra un fichier avec un nom différent?

Était-ce utile?

La solution

tmpnam ne garantit que le dossier n'existait à l'époque - mais il peut être créé avant de pouvoir le faire vous-même. Pour l'utiliser en toute sécurité, vous aurez toujours besoin d'essayer ensuite de créer le fichier avec open (nom de fichier, O_CREAT | O_EXCL | O_NOFOLLOW). Si cela ne fonctionne pas en raison de EEXIST ou ELOOP, revenir en arrière et essayer un nouveau nom.

Ceci est particulièrement important pour se protéger contre des attaques symlink, où un autre programme crée un lien symbolique de votre nom de fichier temporaire dans / etc / passwd ou un autre fichier important.

Aussi, assurez-vous que vous ne passez pas NULL à tmpnam, comme le tampon utilisé est alors la même pour tous les sujets.

Une autre approche qui combine ceux-ci est d'utiliser mkstemp () ou mkostemp (), qui va créer le fichier en toute sécurité pour vous.

Enfin, si vous n'avez pas besoin du nom de fichier, vous pouvez utiliser tmpfile (), qui va créer un fichier temporaire qui sera supprimé à la fermeture.

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