溫馨提示×

C++ getcwd如何處理符號鏈接循環

c++
小樊
97
2024-11-27 14:52:13
欄目: 編程語言

getcwd() 函數用于獲取當前工作目錄的絕對路徑

#include <iostream>
#include <limits.h>
#include <unistd.h>
#include <sys/stat.h>
#include <string.h>

bool follow_symlinks(const char *path, char *buffer, size_t size) {
    ssize_t len = readlink(path, buffer, size - 1);
    if (len < 0) {
        return false;
    }
    buffer[len] = '\0';

    if (len == 0 || strcmp(buffer, path) == 0) {
        return true;
    }

    return follow_symlinks(buffer, buffer, size);
}

int main() {
    char cwd[PATH_MAX];
    if (getcwd(cwd, sizeof(cwd)) != nullptr) {
        std::cout << "Current working directory: " << cwd << std::endl;
    } else {
        perror("getcwd() error");
        return 1;
    }

    return 0;
}

在這個示例中,我們定義了一個名為 follow_symlinks 的輔助函數,它遞歸地跟隨符號鏈接,直到找到一個非符號鏈接的目標或達到最大遞歸深度。然后,我們在 main 函數中使用 getcwd() 獲取當前工作目錄,并調用 follow_symlinks() 函數來處理可能的符號鏈接循環。

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