Pregunta

Actualmente tengo algo de código como (condensada y sacó un montón de comprobación de errores):

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

Esto funciona a las mil maravillas en mi máquina Linux. Sin embargo en otra máquina (se parece a SunOS, SPARC):

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

Me sale el siguiente error en tiempo de compilación:

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

pensé que el dirent.h cabecera era multiplataforma (para máquinas POSIX). Cualquier sugerencia.

¿Fue útil?

Solución

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

  

La definición dirent estructura en Solaris no contiene el campo d_type. Lo que se necesita para hacer los cambios de la siguiente manera

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

cambia a

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

Desde stat también es estándar POSIX que debería ser más multiplataforma. Sin embargo, es posible que desee utilizar if ((s.st_mode & S_IFMT) == S_IFDIR) a seguir la norma.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top