Wie um herauszufinden, ob eine Datei ein link ist?
Habe ich den code unten nur ein Teil der hier gezeigten und ich bin die Kontrolle, wenn einem die Art der Datei.
struct stat *buf /* just to show the type buf is*/
switch (buf.st_mode & S_IFMT) {
case S_IFBLK: printf(" block device\n"); break;
case S_IFCHR: printf(" character device\n"); break;
case S_IFDIR: printf(" directory\n"); break;
case S_IFIFO: printf(" FIFO/pipe\n"); break;
case S_IFLNK: printf(" symlink\n"); break;
case S_IFREG: printf(" regular file\n"); break;
case S_IFSOCK: printf(" socket\n"); break;
default: printf(" unknown?\n"); break;
}
Das problem: der Wert von st_mode
erhalten, wenn ich eine printf("\nMode: %d\n",buf.st_mode);
das Ergebnis ist 33188.
Getestet habe ich mein Programm mit einem normalen Datei-Typ und einen symbolischen link. In beiden Fällen wurde die Ausgabe "normale Datei", die ich.e die symbolische link-Gehäuse defekt ist und ich nicht verstehe warum?
- Die Frage ist ein wenig unklar. Testen Sie eine symbolische Verknüpfung, und das Programm sagt, es ist eine reguläre Datei? Was ist der Wert von buf.st_mode?
- bearbeitet.
- Sie müssen
lstat()
.stat()
folgt symbolischen links und prüft die Dateien, die Sie zeigen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus der
stat (2)
Mann Seite:In anderen Worten, die
stat
Anruf Folgen Sie den symbolischen link auf die Ziel-Datei und die Informationen abzurufen, die für , dass. Versuchen Sie es mitlstat
statt, wird es geben Ihnen die Informationen, die für die link.Wenn Sie Folgendes tun:
dann kompilieren und führen Sie das folgende Programm:
erhalten Sie:
als erwartet.