溫馨提示×

ubuntu readdir如何實現多線程讀取

小樊
39
2025-07-03 01:27:42
欄目: 智能運維

在Ubuntu中,使用C++和POSIX線程庫(pthread)可以實現多線程讀取目錄。以下是一個簡單的示例,展示了如何使用多線程讀取目錄中的文件:

#include <iostream>
#include <dirent.h>
#include <pthread.h>
#include <vector>

// 自定義數據結構,用于存儲線程需要處理的目錄信息
struct ThreadData {
    std::string path;
};

// 線程函數,用于讀取目錄
void* read_directory(void* arg) {
    ThreadData* data = static_cast<ThreadData*>(arg);
    DIR* dir = opendir(data->path.c_str());

    if (dir == nullptr) {
        std::cerr << "無法打開目錄: " << data->path << std::endl;
        return nullptr;
    }

    struct dirent* entry;
    while ((entry = readdir(dir)) != nullptr) {
        std::cout << "文件名: " << entry->d_name << std::endl;
    }

    closedir(dir);
    return nullptr;
}

int main() {
    std::string directory_path = "/path/to/your/directory";
    pthread_t threads[4]; // 創建4個線程
    ThreadData thread_data[4];

    // 初始化線程數據
    for (int i = 0; i < 4; ++i) {
        thread_data[i].path = directory_path;
    }

    // 創建線程
    for (int i = 0; i < 4; ++i) {
        if (pthread_create(&threads[i], nullptr, read_directory, &thread_data[i]) != 0) {
            std::cerr << "創建線程失敗" << std::endl;
            return 1;
        }
    }

    // 等待線程結束
    for (int i = 0; i < 4; ++i) {
        pthread_join(threads[i], nullptr);
    }

    return 0;
}

在這個示例中,我們創建了一個名為read_directory的線程函數,它接受一個ThreadData結構體指針作為參數。ThreadData結構體包含一個字符串,表示要讀取的目錄路徑。我們創建了4個線程,每個線程都會調用read_directory函數來讀取目錄中的文件。

要編譯此程序,請使用以下命令:

g++ -o multi_threaded_directory_read multi_threaded_directory_read.cpp -pthread

然后運行編譯后的程序:

./multi_threaded_directory_read

請注意,這個示例僅用于演示目的,實際應用中可能需要根據需求進行調整。例如,可以使用線程池來限制同時運行的線程數量,或者根據目錄中的文件數量動態創建線程。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女