Domanda

Sto cercando di identificare i tipi di file per le voci della directory (Windows Unix ecc.).

In sys / stat.h il nybble di ordine superiore della parola st_mode ha i valori codificati:

#define S_IFDIR  0x4000  /* directory */
#define S_IFIFO  0x1000  /* FIFO special */
#define S_IFCHR  0x2000  /* character special */
#define S_IFBLK  0x3000  /* block special */
#define S_IFREG  0x8000  /* or just 0x0000, regular */

Dal commento sembra che il nybble possa essere 0 o 8 per rappresentare un "file normale".

Quindi questo pone la domanda: in quali circostanze è 0 e non 8? Se avessi definito questi codici, avrei riservato 0 per inidicare sconosciuto / indefinito / non valido / non un file o qualcosa del genere.

In effetti la macro S_ISREG è:

#define S_ISREG(m)  ((m) & S_IFREG)

Questo mi sembra indicare che dovrebbe essere un file normale ci si aspetta sempre che abbia il codice 8 (e 0 sarebbe un'abberazione?).

Sarebbe un presupposto valido interpretare 0 come file sconosciuto o non valido e ignorare il commento 'o solo 0x0000' e aspettarsi sempre che 8 venga usato per tutti i file normali?

È stato utile?

Soluzione

La maggior parte delle fonti indica che è sufficiente controllare S_ISREG; Non sono sicuro quando vedresti 0x0000 come " regolare " file.

Credo che alcune vecchie implementazioni usassero 0x0000 (una ricerca di intestazione DJGPP davvero vecchia lo rivela) ma è l'unico vero riferimento che riesco a trovare. Tutto il resto punta a 0x8000.

Fondamentalmente, usa la macro S_ISREG e spera che l'intestazione su qualunque cosa tu stia compilando faccia la cosa giusta.

Altri suggerimenti

Mi fiderei delle definizioni di S_IFREG e S_ISREG. Non ho mai lavorato con un file system che ha rotto quelle macro.

La mia ipotesi è che la definizione 0x0000 per un file normale sia quella di gestire i file system legacy che potrebbero aver usato una diversa codifica delle informazioni sul tipo di file. Quale sistema operativo e file system stai usando?

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