C语言获取符号链接真实路径的问题

比如我在Linux系统下创建了一个如下文件 /test/aa/bb/cc,又给目录文件aa创建了一个符号链接/test/linkaa,C语言怎么获取/test/linkaa/bb目录的实际路径?我试了下linux命令可以通过readlink -f /testlinkaa/bb获取,而C函数readlink( )好像只能获取/test/linkaa的,获取不到//test/linkaa/bb的,也就是说readlink( )函数路径的最后一级必须是符号链接才行。怎么通过C代码获取/test/linkaa/bb的真实路径呢?

谢谢各位,我自己写了段代码实现了。
char get_exe_path(const char link_path, char* real_path, int count)
{
int i = 0;
int result = readlink(link_path, real_path, count-1);
if( (result < 0) || (result >= count-1) )
{
return NULL;
}

real_path[result] = '\0';

return real_path;

}

char *left(char *dst, const char *src, int n)
{
const char *p = src;
char *q = dst;
int len = strlen(src);

if (n > len)
    n = len;

while(n--)
    *(q++) = *(p++);

*(q++)='\0';

return dst;

}

char *right(char *dst, const char *src, int n)
{
const char *p = src;
char *q = dst;
int len = strlen(src);

if (n > len)
    n = len;

p += (len - n);

while (*(q++) = *(p++));

return dst;

}

void get_real_path(const char *linkpath, char *realpath)
{
char tmppath[1024], left_path[1024], right_path[1024];
char *tmpbuf;
int tmplen, rightlen = 0;

if (get_exe_path(linkpath, realpath, 1024))
{
    return;
}

strcpy(tmppath, linkpath);

while (NULL != (tmpbuf =  strrchr(tmppath, '/')))
{
    tmplen = strlen(tmpbuf);
    rightlen += tmplen;

    left(left_path, tmppath, strlen(tmppath) - tmplen);

    if (get_exe_path(left_path, realpath, 1024))
    {
        right(right_path, linkpath,rightlen);
        strcat(realpath, right_path);
        return;
    }
    strcpy(tmppath, left_path);
}

strcpy(realpath, linkpath);

return;

}

凡是用命令能获取的,一律可以用

system("命令>~/tmp.txt");

然后读文件~/tmp.txt的内容的办法获取

把/test/linkaa/bb拆分为两段,/test/linkaa/ 和 bb
首先根据/test/linkaa/读取出真实路径/test/aa/
其次拼接/test/aa/ 和 bb。
最终得到/test/aa/bb。

可以参考下文
https://www.coder.work/article/1543841

相关函数:stat, lstat, symlink

头文件:#include

定义函数:int readlink(const char * path, char * buf, size_t bufsiz);

函数说明:readlink()会将参数path 的符号连接内容存到参数buf 所指的内存空间, 返回的内容不是以NULL作字符串结尾, 但会将字符串的字符数返回. 若参数bufsiz 小于符号连接的内容长度, 过长的内容会被截断.

返回值:执行成功则传符号连接所指的文件路径字符串, 失败则返回-1, 错误代码存于errno.