Ich habe den folgenden Code nur ein Teil davon wird hier gezeigt und ich überprüfe, ob eine der Art der Datei.Wie herauszufinden, ob eine Datei eine Verbindung ist?
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: Wert von st_mode
erhalten, wenn ich ein printf("\nMode: %d\n",buf.st_mode);
das Ergebnis ist 33188.
ich mein Programm mit einem regulären Dateityp und einem symbolischen Link getestet. In beiden Fällen war die Ausgabe "reguläre Datei", d. H. Der Fall des symbolischen Links schlägt fehl und ich verstehe nicht warum?
Die Frage ist ein wenig unklar. Testen Sie einen symbolischen Link und das Programm sagt, dass es sich um eine normale Datei handelt? Was ist der Wert von buf.st_mode? –
@Gintautas: bearbeitet. –
Sie brauchen 'lstat()'. 'stat()' folgt symbolischen Links und prüft die Dateien, auf die sie verweisen. –