ubuntu

ubuntu readdir如何实现多线程读取

小樊
40
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
看了该问题的人还看了