温馨提示×

linux readdir怎样识别文件类型

小樊
81
2024-12-29 09:37:23
栏目: 智能运维

在Linux中,可以使用readdir()函数从目录中读取文件和子目录

#include <stdio.h>
#include <dirent.h>
#include <sys/types.h>

int main() {
    DIR *dir;
    struct dirent *entry;
    const char *dir_path = "/path/to/directory"; // 替换为你要读取的目录路径

    dir = opendir(dir_path);
    if (dir == NULL) {
        perror("Failed to open directory");
        return 1;
    }

    while ((entry = readdir(dir)) != NULL) {
        // 获取文件类型
        enum {
            DT_DIR,       // 目录
            DT_REG,       // 普通文件
            DT_LNK,       // 符号链接
            DT_SOCK,      // 套接字
            DT_FIFO,      // 命名管道
            DT_CHAR,      // 字符设备
            DT_BLOCK     // 块设备
        } type;

        type = entry->d_type;

        // 根据文件类型进行相应的处理
        switch (type) {
            case DT_DIR:
                printf("Directory: %s/%s\n", dir_path, entry->d_name);
                break;
            case DT_REG:
                printf("Regular file: %s/%s\n", dir_path, entry->d_name);
                break;
            case DT_LNK:
                printf("Symbolic link: %s/%s\n", dir_path, entry->d_name);
                break;
            case DT_SOCK:
                printf("Socket: %s/%s\n", dir_path, entry->d_name);
                break;
            case DT_FIFO:
                printf("Named pipe: %s/%s\n", dir_path, entry->d_name);
                break;
            case DT_CHAR:
                printf("Character device: %s/%s\n", dir_path, entry->d_name);
                break;
            case DT_BLOCK:
                printf("Block device: %s/%s\n", dir_path, entry->d_name);
                break;
            default:
                printf("Unknown type: %s/%s\n", dir_path, entry->d_name);
                break;
        }
    }

    closedir(dir);
    return 0;
}

这个示例程序会打印出指定目录中所有文件和子目录的类型。注意,d_type字段可能在某些系统上不可用,因此你可能需要使用其他方法(例如stat()函数)来获取更准确的文件类型信息。

0