Ich habe den folgenden Code hier wird nur ein Teil davon gezeigt und ich überprüfe, ob ein Dateityp vorliegt.
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 a printf("\nMode: %d\n",buf.st_mode);
das Ergebnis ist 33188.
Ich habe mein Programm mit einem normalen Dateityp und einem symbolischen Link getestet. In beiden Fällen war die Ausgabe “normale Datei”, dh der symbolische Linkfall schlägt fehl und ich verstehe nicht, warum?
Die Frage ist etwas unklar. Testen Sie einen symbolischen Link und das Programm sagt, es sei eine normale Datei? Welchen Wert hat buf.st_mode?
– Gintautas Miliauskas
21. Oktober 2010 um 6:52 Uhr
Du brauchst
lstat()
.stat()
folgt symbolischen Links und überprüft die Dateien, auf die sie verweisen.– Michael Foukarakis
21. Oktober 2010 um 7:12 Uhr