opendir()
函數(shù)是用于打開一個目錄流,它允許你逐個讀取目錄中的文件和子目錄
以下是一個簡單的示例,展示了如何使用 opendir()
和 readdir()
函數(shù)處理符號鏈接:
#include<iostream>
#include<string>
#include <dirent.h>
#include <sys/stat.h>
#include <unistd.h>
int main() {
DIR *dir;
struct dirent *entry;
struct stat statbuf;
// 打開目錄
dir = opendir(".");
if (dir == NULL) {
std::cerr << "Error opening directory"<< std::endl;
return 1;
}
// 逐個讀取目錄項
while ((entry = readdir(dir)) != NULL) {
// 獲取目錄項的完整路徑
std::string full_path = "./" + std::string(entry->d_name);
// 獲取目錄項的狀態(tài)信息
if (lstat(full_path.c_str(), &statbuf) == -1) {
std::cerr << "Error getting file status: "<< entry->d_name<< std::endl;
continue;
}
// 判斷是否為符號鏈接
if (S_ISLNK(statbuf.st_mode)) {
std::cout << "Symbolic link: "<< entry->d_name<< std::endl;
} else {
std::cout << "Regular file or directory: "<< entry->d_name<< std::endl;
}
}
// 關(guān)閉目錄流
closedir(dir);
return 0;
}
在這個示例中,我們首先使用 opendir()
函數(shù)打開當前目錄(.
)。然后,我們使用 readdir()
函數(shù)逐個讀取目錄項。對于每個目錄項,我們使用 lstat()
函數(shù)獲取其狀態(tài)信息,并檢查它是否是一個符號鏈接。如果是符號鏈接,我們輸出相應的信息;否則,我們輸出它是一個普通文件或目錄。最后,我們使用 closedir()
函數(shù)關(guān)閉目錄流。