【问题标题】:how to check the path to a symbolic link, but not to what it indicates, but to the link itself. IN C如何检查符号链接的路径,但不是检查它所指示的内容,而是检查链接本身。在 C
【发布时间】:2020-10-23 18:11:26
【问题描述】:

我看过很多类似的主题,我已经阅读了很多 readlink 和 realpath,但问题是我需要 pliksoft 的路径,而不是这个链接指向的位置。

例如:

我有符号链接:pliksoft->abc

结果应该是:

/users/staff/trl/am/SK/pliksoft

不是

/users/staff/trl/am/SK/abc

我这样做是这样的:

char buf[PATH_MAX], buf_2[PATH_MAX]; 

readlink(argv[1], buf, PATH_MAX); 
realpath(buf, buf_2);

printf("%s\n", buf_2);

但这是一个糟糕的结果。

【问题讨论】:

  • 如果你不想关注符号链接,为什么要使用readlink
  • readlink 用于跟踪符号链接并了解更多关于它们指向的内容。如果您不在乎,请不要遵循它,按原样使用它。
  • readlink() 函数是反常的,不会终止结果字符串。设计师应该被悬挂,绘制和四分之一。注意返回值——它告诉你数据有多长。
  • 所以如果我这样做,我会得到相同的结果:realpath(argv[1], buf_2)
  • 您似乎需要将getcwd() 的结果与pliksoft 的值结合起来才能得到您想要的结果。不过,我不确定如何概括。

标签: c symlink realpath


【解决方案1】:

我想你正在尝试这样做:

#include <libgen.h>
#include <limits.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

int
main(int argc, char **argv)
{
        char buf[PATH_MAX];
        char *path = argc > 1 ? argv[1] : "foo";

        realpath(dirname(path), buf);
        printf("%s/%s -> ", buf, basename(path));
        realpath(path, buf);
        printf("%s\n", buf);

        return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    相关资源
    最近更新 更多