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