利用realpath(const char *path, char *resolved_path)
realpath() 扩展所有符号链接并解析对 /./、/../ 和由 path 命名的以 null 结尾的字符串中的额外“/”字符的引用,以生成规范化的绝对路径名。
在你的情况下:
char *currentPath() {
char *path, *canon_path;
path = getcwd(NULL, MAXPATHLEN);
canon_path = realpath(path, NULL);
free(path);
return canon_path;
}
请注意,这不会获取可执行程序的路径(不清楚您要做什么)。便携地做到这一点比较棘手。您需要使用 的值argv[0]
来获取它:
char *bindir(char *argv0) {
char *canon_path = realpath(argv0, NULL);
char *canon_dir = strdup(dirname(canon_path));
free(canon_path);
return canon_dir;
}
该strdup
调用是必需的,因为dirname
可能会修改其参数并返回指向该参数的指针或返回指向静态分配缓冲区的指针。