143 votes

Où est défini PATH_MAX dans Linux ?

Quel fichier d'en-tête dois-je invoquer avec #include pour pouvoir utiliser PATH_MAX comme un int pour dimensionner une chaîne de caractères ?

Je veux pouvoir déclarer :

char *current_path[PATH_MAX];

Mais lorsque je le fais, mon compilateur (Clang/LLVM sous Linux) émet l'erreur suivante :

recursive_find6.c:29:20: error: use of undeclared identifier 'PATH_MAX'
char *current_path[PATH_MAX];
                   ^

J'ai essayé de faire une recherche sur Google, mais je n'ai toujours rien trouvé.

#include <limits.h> Ne résout PAS le problème/l'erreur.

Ai-je raison de dire que la valeur de PATH_MAX est un nombre entier ?

3 votes

Veuillez consulter cette question : stackoverflow.com/questions/833291/

23 votes

Vous souhaitez probablement char current_path[PATH_MAX]; au lieu de char *current_path[PATH_MAX]; - vous voulez une chaîne de caractères plutôt qu'un tableau de pointeurs.

0 votes

3voto

user3104363 Points 103

PATH_MAX est une limite du système. Il existe trois catégories de limites système dans l'environnement POSIX. L'une de ces catégories est Nom de chemin Valeurs des variables . Les limites du système qui dépendent du système de fichiers entrent dans cette catégorie. PATHMAX est également une valeur variable du nom de chemin. (cette valeur peut donc changer d'un système de fichiers à l'autre). Ainsi, la limite de PATHNAME peut être obtenue avec pathconf()/fpathconf() Fonctions POSIX. Il s'agit d'un moyen portable d'obtenir la limite de PATHNAME d'un système de fichiers spécifique. L'exemple de code est le suivant :

long
get_pathmax(void)
{
  long pathmax = -1;

  errno = 0;
  pathmax = pathconf("/", _PC_PATH_MAX);
  if (-1 == pathmax)
  {
    if (0 == errno)
    {
#define PATHMAX_INFINITE_GUESS 4096
      pathmax = PATHMAX_INFINITE_GUESS;
    }
    else
    {
      fprintf (stderr, "pathconf() FAILED, %d, %s\n", errno, strerror(errno));
    }
  }

  return pathmax;
}

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