Ich drucke das Ergebnis S_ISDIR(info->st_mode)
und S_ISREG(info->st_mode)
über ein Verzeichnis, das dynamische Bibliothek mit .so
Erweiterung enthält, und das Ergebnis ist ziemlich überraschend, S_ISREG
kehrt 0
während S_ISDIR
liefert 1.C seltsam stat st_mode
Ich bin ein wenig verwirrt ...
Der Code:
DIR *dir;
if ((dir = opendir (dirname)) != NULL) {
struct dirent *ent;
while ((ent = readdir (dir)) != NULL) {
struct stat info;
stat(ent->d_name, &info);
printf("file: %s, S_ISREG: %d, S_ISDIR: %d", ent->d_name, S_ISREG(info.st_mode), S_ISDIR(info.st_mode));
}
}
closedir(dir);
Die Ausgabe sieht so aus:
file: ., S_ISREG: 0, S_ISDIR: 1
file: zyva.so, S_ISREG: 0, S_ISDIR: 1
file: .gitignore, S_ISREG: 1, S_ISDIR: 0
file: .., S_ISREG: 0, S_ISDIR: 1
file: plugin-app, S_ISREG: 0, S_ISDIR: 1
file: chat.so, S_ISREG: 0, S_ISDIR: 1
Plugin-App ist auch eine ausführbare Datei, so ist es auch eine normale Datei ...
Sind Sie auf einem Mac? –
Nein, ich bin auf Linux. –
Ich denke, Ihr Code wird nur funktionieren, wenn "dirname" ist "". "'. Andernfalls müssen Sie 'dirname' und' ent-> d_name' verketten, bevor Sie 'stat' aufrufen. –