溫馨提示×

linux readdir怎樣識別文件類型

小樊
111
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
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女