Question

À l'heure actuelle, j'ai un code comme (condensé et enlevé un groupe de contrôle d'erreur):

dp = readdir(dir);
if (dp->d_type == DT_DIR) {
}

Cela fonctionne à merveille sur ma machine Linux. Cependant sur une autre machine (qui ressemble à SunOS, sparc):

SunOS HOST 5.10 Generic_127127-11 sun4u sparc SUNW,Ultra-5_10

Je reçois l'erreur suivante au moment de la compilation:

error: structure has no member named `d_type'
error: `DT_DIR' undeclared (first use in this function)

Je pensais que l'en-tête de dirent.h était multiplate (pour les machines POSIX). Toutes les suggestions.

Était-ce utile?

La solution

http://www.nexenta.org/os/Porting_Codefixes :

  

La définition de struct en structure dirent solaris ne contient pas le champ d_type. Vous devrez effectuer les modifications comme suit

if (de->d_type == DT_DIR)
{
   return 0;
}
  

modifications à

struct stat s; /*include sys/stat.h if necessary */
..
..
stat(de->d_name, &s);
if (s.st_mode & S_IFDIR)
{
  return 0;
}

Depuis stat est également standard POSIX il devrait être plus multiplateforme. Mais vous pouvez utiliser if ((s.st_mode & S_IFMT) == S_IFDIR) suivre la norme.

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