溫馨提示×

c++ opendir函數(shù)如何處理符號鏈接

c++
小樊
82
2024-09-13 04:10:33
欄目: 編程語言

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)閉目錄流。

0