如何检查指向符号链接的路径,而不是指向它所指示的内容,而是指向链接本身。在C中

如何检查指向符号链接的路径,而不是指向它所指示的内容,而是指向链接本身。在C中,c,symlink,realpath,C,Symlink,Realpath,我看过很多类似的主题,我看过很多readlink和realpath,但问题是我需要到pliksoft的路径,而不是这个链接点的位置 例如: 我有一个符号链接:pliksoft->abc 结果应为: /用户/员工/trl/am/SK/pliksoft 不是 /用户/员工/trl/am/SK/abc 我是这样做的: char buf[PATH_MAX], buf_2[PATH_MAX]; readlink(argv[1], buf, PATH_MAX); realpath(buf, buf_2

我看过很多类似的主题,我看过很多readlink和realpath,但问题是我需要到pliksoft的路径,而不是这个链接点的位置

例如:

我有一个符号链接:pliksoft->abc

结果应为:

/用户/员工/trl/am/SK/pliksoft

不是

/用户/员工/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);

但这是一个糟糕的结果。

我想你是想做:

#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;
}
#包括
#包括
#包括
#包括
#包括
int
主(内部argc,字符**argv)
{
char buf[PATH_MAX];
char*path=argc>1?argv[1]:“foo”;
realpath(dirname(path),buf);
printf(“%s/%s->”,buf,basename(path));
realpath(路径,buf);
printf(“%s\n”,buf);
返回0;
}

如果您不想跟随符号链接,为什么要使用
readlink
readlink
用于跟随符号链接并了解它们指向的更多信息。如果您不在乎,那么就不要遵循它,只需按原样使用它。
readlink()
函数是不正确的,并且不会以null终止结果字符串。设计师应该被吊死,画出来,四等分。请注意返回值-它告诉您数据的长度。因此,如果我这样做,我得到的结果是相同的:realpath(argv[1],buf_2)。看起来您需要将
getcwd()
的结果与
pliksoft
的值结合起来才能得到您想要的结果。不过,我不知道如何概括这一点。