Domanda

Al momento ho qualche codice come (condensato e rimosso un gruppo di controllo di errore):

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

Questo funziona a meraviglia sulla mia macchina Linux. Tuttavia su un'altra macchina (appare come SunOS, Sparc):

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

ottengo il seguente errore in fase di compilazione:

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

ho pensato che il colpo di testa viene dirent.h multipiattaforma (per le macchine POSIX). Eventuali suggerimenti.

È stato utile?

Soluzione

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

  

La definizione dirent struct di Solaris non contiene il campo d_type. Si avrebbe bisogno di fare i cambiamenti nel modo seguente

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

cambia in

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

Dal stat è anche standard POSIX dovrebbe essere più cross-platform. Ma si consiglia di utilizzare if ((s.st_mode & S_IFMT) == S_IFDIR) di seguire lo standard.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top