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

c++
633
2024/11/27 15:23:06
栏目: 编程语言
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

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() 函数来处理可能的符号链接循环。

辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读: 红黑树与C++模板元编程:创建高度适应性的数据结构