2009-05-12 23 views

Antwort

2

Blick in stat(). Hört sich an, als wären Sie auf einem Linux- oder POSIX-System, so sollte das der Fall sein.

Schauen Sie sich das st_mode Feld der struct stat, es enthält die Informationen über den Schutz Bits, die oft kollektiv eine Datei „Modus“ bezeichnet (wie durch den chmod Befehl reflektierten, die die Einstellungen ändern).

Der Übergang von den binären Bits zu einer textuellen Darstellung wie ls '... ist eine interessante Herausforderung.

3

Die stat() Systemaufruf nimmt einen Dateinamen String und gibt die folgende Struktur:

struct stat { 
    dev_t  st_dev;  /* ID of device containing file */ 
    ino_t  st_ino;  /* inode number */ 
    mode_t st_mode; /* protection */ 
    nlink_t st_nlink; /* number of hard links */ 
    uid_t  st_uid;  /* user ID of owner */ 
    gid_t  st_gid;  /* group ID of owner */ 
    dev_t  st_rdev; /* device ID (if special file) */ 
    off_t  st_size; /* total size, in bytes */ 
    blksize_t st_blksize; /* blocksize for filesystem I/O */ 
    blkcnt_t st_blocks; /* number of blocks allocated */ 
    time_t st_atime; /* time of last access */ 
    time_t st_mtime; /* time of last modification */ 
    time_t st_ctime; /* time of last status change */ 
}; 

Dies sowie Dateien auf Verzeichniseinträge gleich gut funktioniert und die st_mode ist in dem Feld Sie suchen .

<sys/stat.h> Die Header-Datei sollte diese Struktur enthalten, und alle Definitionen zusammen mit #defines und/oder Makros für intelligente Weise die Felder Decodierung (siehe here für eine Probe).

Wenn Sie interessiert sind, wie es wirklich gemacht ist, können Sie den ls Quellcode in GNU coreutils betrachten. Aber nutze das nur, um dich zu bilden. Es ist GPL, also kannst du es nicht einfach für deine eigenen Zwecke verwenden, und wenn das Hausaufgaben sind, wird dein Erzieher dich wahrscheinlich scheitern lassen, wenn du etwas eingibst, das diesem zu ähnlich sieht.

+0

hi, können Sie mir ein Beispiel 'c' Programm geben, um 'ls -l' Befehl zu tun? Danke –

+4

Nein, weil Sie nicht einmal * versucht * haben, es selbst zu tun. Ich bin hier, um Menschen zu helfen, zu lernen, nicht ihre Arbeit für sie zu tun. – paxdiablo

Verwandte Themen