c/c++开发分享如何获得符号链接的绝对路径?

如何获得符号链接的绝对路径? 如果我按以下方式进行:

char buf[100]; realpath(symlink, buf); 

我不会得到符号链接的绝对路径,而是我会得到这个符号链接链接到的绝对路径。 现在我的问题是:如果我想获得符号链接本身的abs路径怎么办? Linux c中是否有任何function允许我这样做? 注意:我想要实现的是符号链接本身的绝对路径。 不是它指向的路径! 例如,smybolic链接的相对路径是: Task2/sym_lnk ,我想要它的abs路径,可以是: home/user/kp/Task2/sym_lnk

    您可以将realpath()函数与符号链接的父文件夹一起使用,然后连接符号链接名称。

     #include  #include  #include  #include  #include  // Find the last occurrence of c in str, otherwise returns NULL char* find_last_of( char *str, char c ) { for( char *i = str + strlen(str) ; i >= str ; i-- ) if( *i == c ) return i; return NULL; } // Does the job char* getAbsPath( char *path ) { char *name; // Stores the symlink name char *tmp; // Aux for store the last / char *absPath = malloc( PATH_MAX ); // Stores the absolute path tmp = find_last_of( path, '/' ); // If path is only the symlink name (there's no /), then the // parent folder is the current work directory if( tmp == NULL ){ name = strdup( path ); getcwd( absPath, PATH_MAX ); // Is already absolute path } else{ // Extract the name and erase it from the original // path. name = strdup( tmp + 1 ); *tmp = ''; // Get the real path of the parent folder. realpath( path, absPath ); } // Concatenate the realpath of the parent and "/name" strcat( absPath, "/" ); strcat( absPath, name ); free( name ); return absPath; } // Test the function int main( int argc, char **argv ) { char *absPath; if( argc != 2 ){ fprintf( stderr, "Use:nn %s n", *argv ); return -1; } // Verify if path exists if( access( argv[1], F_OK ) ){ perror( argv[1] ); return -1; } absPath = getAbsPath( argv[1] ); printf( "Absolute Path: %sn", absPath ); free( absPath ); return 0; } 

    如果将上述代码与目录一起使用,则需要“。”的特殊情况。 和“..”,但与“./”和“../”一起使用

    你可以使用系统调用readlink()

     readlink(const char* fdpath,char* filepath, 256); 

    fdpath是符号链接的path 。 好像/proc/pid/fd/link_number

    filepath是其指向的文件的路径

      以上就是c/c++开发分享如何获得符号链接的绝对路径?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(猴子技术宅)。

      本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/545909.html

      发表评论

      电子邮件地址不会被公开。 必填项已用*标注