在 CentOS 系統中,使用 readdir
函數進行多線程讀取目錄可以通過以下步驟實現:
安裝必要的開發工具和庫:
確保你已經安裝了 gcc
和 pthread
庫。如果沒有安裝,可以使用以下命令進行安裝:
sudo yum install gcc pthread-devel
編寫多線程程序:
下面是一個簡單的示例程序,展示了如何使用 readdir
函數和多線程來讀取目錄內容。
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <pthread.h>
// 定義一個結構體來傳遞參數
typedef struct {
char *path;
} ThreadData;
// 線程函數
void *read_directory(void *arg) {
ThreadData *data = (ThreadData *)arg;
DIR *dir;
struct dirent *entry;
dir = opendir(data->path);
if (dir == NULL) {
perror("opendir");
pthread_exit(NULL);
}
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
pthread_exit(NULL);
}
int main(int argc, char *argv[]) {
pthread_t threads[4];
ThreadData thread_data[4];
int i;
if (argc != 2) {
fprintf(stderr, "Usage: %s <directory_path>\n", argv[0]);
return EXIT_FAILURE;
}
for (i = 0; i < 4; i++) {
thread_data[i].path = argv[1];
if (pthread_create(&threads[i], NULL, read_directory, (void *)&thread_data[i]) != 0) {
perror("pthread_create");
return EXIT_FAILURE;
}
}
for (i = 0; i < 4; i++) {
pthread_join(threads[i], NULL);
}
return EXIT_SUCCESS;
}
編譯程序:
使用 gcc
編譯上述程序,并鏈接 pthread
庫:
gcc -o multi_threaded_readdir multi_threaded_readdir.c -lpthread
運行程序: 運行編譯后的程序,并指定要讀取的目錄路徑:
./multi_threaded_readdir /path/to/directory
這個示例程序創建了 4 個線程,每個線程都會讀取指定的目錄內容并打印文件名。你可以根據需要調整線程的數量和目錄路徑。
readdir
函數本身是線程安全的,但如果你在多線程環境中修改共享數據,需要使用互斥鎖(pthread_mutex_t
)來保護共享數據。opendir
和 readdir
的返回值,并在出現錯誤時進行適當的處理。