38 votes

Comment trouver le répertoire "temp" sous Linux ?

Comment trouver le répertoire "temp" sous Linux ? Je suis en train d'écrire une fonction C++ neutre en termes de plate-forme qui renvoie le répertoire temp. Sous Mac et Windows, il existe une API qui renvoie ces résultats. Sous Linux, je ne sais pas quoi faire.

32voto

Greg Dan Points 2667

Vérifier les variables suivantes :

En cas d'échec, essayez d'utiliser le répertoire /tmp .

Vous pouvez également utiliser tempnam pour générer un nom de fichier temporaire unique.

0 votes

Existe-t-il une norme (POSIX ou autre) qui spécifie cet ordre des choses ? Je l'ai vu à plusieurs endroits, donc je suis sûr que c'est correct, mais je me demandais s'il y avait une déclaration officielle quelque part.

19voto

Adam Wright Points 31715

Édition : remarque pertinente de l'auteur de l'article. tmpnam n'est pas un bon choix de nos jours ; utilisez mktemp / mkstemp au lieu de cela.

Réponse historique : Soyez conforme à POSIX et utilisez tmpnam (qui vous donnera un nom de fichier complet dans un emplacement temporaire).

7 votes

La page de manuel linux que j'ai pour tmpnam dit dans sa section BUGS : "N'utilisez jamais cette fonction. Utilisez mkstemp ou tmpfile"

1 votes

J'obtiens le même avertissement sur mktemp linux page de manuel . Et je n'ai pas mkstemp o tmpfile (sous OSX).

1 votes

Mkstemp ne vous aide pas à déterminer le répertoire à utiliser.

12voto

Greg Hewgill Points 356191

Utilisez la valeur de la variable d'environnement $TMPDIR, et si elle n'existe pas, utilisez /tmp .

11voto

Borgboy Points 41

La séquence acceptée, spécifiquement du point de vue de GNU, est la suivante :

  1. Vérifier la variable d'environnement TMPDIR ( getenv("TMPDIR") ) que si le programme n'est pas exécuté en tant que SUID/SGID ( issetugid() == 0 )
  2. Dans le cas contraire, utiliser P_tmpdir s'il est défini et valide
  3. et enfin, en cas d'échec, utiliser _PATH_TMP disponible dans paths.h

Si vous ajoutez une extension ou un module, vérifiez si le noyau fournit une fonction à cet effet. Par exemple, PHP exporte php_get_temporary_directory() de main/php_open_temporary_file.h.

1voto

jm. Points 7092

En c standard, vous pouvez essayer : P_tmpdir

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X