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.
Schreibe einen Kommentar