温馨提示×

C++ getcwd如何处理符号链接循环

c++
小樊
82
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