在 CentOS 中,readdir 函数可能会遇到一些常见错误
fcntl 函数检查文件描述符是否有效。#include <unistd.h>
#include <fcntl.h>
int main() {
    int fd = open("file.txt", O_RDONLY);
    if (fd == -1) {
        perror("open");
        return 1;
    }
    struct stat sb;
    if (fstat(fd, &sb) == -1) {
        perror("fstat");
        close(fd);
        return 1;
    }
    if (!S_ISREG(sb.st_mode)) {
        fprintf(stderr, "Not a regular file\n");
        close(fd);
        return 1;
    }
    close(fd);
    return 0;
}
DIR *dir = opendir("directory");
if (dir == NULL) {
    perror("opendir");
    return 1;
}
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
    // Process the directory entry
}
closedir(dir);
DIR *dir = opendir("directory");
if (dir == NULL) {
    perror("opendir");
    return 1;
}
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
    // Process the directory entry
    // Simulate memory allocation failure
    if (entry->d_name == NULL) {
        fprintf(stderr, "Memory allocation failed\n");
        continue;
    }
}
closedir(dir);
DIR *dir = opendir("directory");
if (dir == NULL) {
    perror("opendir");
    return 1;
}
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
    // Process the directory entry
    // Check for illegal entries
    if (entry->d_name[0] == '\0' || entry->d_name[strlen(entry->d_name) - 1] == '\0') {
        fprintf(stderr, "Illegal directory entry: %s\n", entry->d_name);
        continue;
    }
}
closedir(dir);
遵循这些建议,你应该能够解决 CentOS 中 readdir 的常见错误。如果你遇到其他问题,请随时提问。