Domanda

Mi rendo conto che una directory è solo un file in UNIX che contiene i numeri di inode ei nomi dei file all'interno. Come faccio a dare un'occhiata a questo? Non posso usare gatto o meno su una directory, e l'apertura nel VI appena mi mostra un elenco dei file ... senza numeri di inode.

È stato utile?

Soluzione

Dal momento che si tratta di una questione di programmazione (è è una questione di programmazione, non è vero?), Si dovrebbe verificare le funzioni opendir, readdir e closedir. Questi sono parte della Single UNIX Spec.

#include <sys/types.h>
#include <dirent.h>

DIR *opendir (const char *dirname);
struct dirent *readdir(DIR *dirp);
int closedir(DIR *dirp);

Il file dirent.h deve avere la struttura di cui avete bisogno, contenente almeno:

char   d_name[]    name of entry
ino_t  d_ino       file serial number

qui per la pagina di manuale readdir - contiene collegamenti a gli altri.

Tieni presente che la quantità di informazioni su un file memorizzato nelle voci di directory per esso è minimo. L'inode contiene in sé la roba che si ottiene dalla funzione stat, cose come i tempi, dimensione, permessi, proprietà e così via, insieme a tutte le importanti puntatori al contenuto del file vero e proprio.

Altri suggerimenti

Ai vecchi tempi - Versione 7, System III, all'inizio del System V - si potrebbe davvero aprire una directory e leggere il contenuto in memoria, soprattutto per il vecchio sistema di file Unix, con numeri di inode 2 byte e un limite di 14 byte sul nome del file.

Per quanto i file system più esotiche è diventato più prevalente, l'opendir (), readdir (), closedir () famiglia di chiamate di funzione doveva essere utilizzato, invece, perché l'analisi del contenuto di una directory è diventato sempre più non banale.

Infine, negli ultimi dieci anni o giù di lì, ha raggiunto il punto in cui sulla maggior parte dei sistemi, non è possibile leggere la directory; è possibile aprirlo (in primo luogo in modo da operazioni come fchdir () possono lavorare), ed è possibile utilizzare la famiglia opendir () di chiamate di leggerlo.

Sembra che il comando stat potrebbe essere in ordine. Dall'articolo:

stat /etc/passwd

    File: `/etc/passwd'
    Size: 2911                Blocks: 8 IO    Block: 4096 regular file
    Device: fd00h/64768d      Inode: 324438   Links: 1
    Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
    Access: 2008-08-11 05:24:17.000000000 -0400
    Modify: 2008-08-03 05:11:05.000000000 -0400
    Change: 2008-08-03 05:11:05.000000000 -0400
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top