如何获取符号链接的绝对路径?

2024-02-25

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

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

我不会获得符号链接的绝对路径,但我会获得此符号链接链接到的绝对路径。现在我的问题是:如果我想获取符号链接本身的绝对路径怎么办? Linux C 中有什么函数可以让我这样做吗?

注意:我想要实现的是符号链接本身的绝对路径,而不是它指向的路径!例如,如果符号链接的相对路径是Task2/sym_lnk,我想要它的绝对路径,可以是/home/user/kp/Task2/sym_lnk.


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

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

// 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 = '\0';
        // 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:\n\n %s <symlink>\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: %s\n", absPath );
    free( absPath );
    return 0;
}

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取符号链接的绝对路径? 的相关文章

随机推荐

  • 像模板一样保存多个 CKEditor 内联编辑器字段的数据

    我正在建立一个模板系统 设计人员可以在其中提交 HTML5 设计并允许用户添加自己的内容 我正在为该应用程序使用 CKEditor 4 2 和 Rails 3 我希望用户能够加载模板页面 然后直接编辑各种内联编辑器 然后通过 JS 和 Aj
  • C# WPF ComboBox - 排除绑定数据的最后一行(或空白)(从 Microsoft Access 绑定)

    目前我正在使用 Microsoft Access 来保存数据 它将绑定到 WPF 组合框 下面的代码几乎可以正常工作 oleDBCommand CommandText SELECT table Col1 table Col2 As COl1
  • 了解所有线程何时完成并处理异常

    我正在使用 Executor 框架使用线程池 即 newFixedThreadPool 启动多个线程 我使用 threadpool submit aThread 提交要由线程池执行的作业 这工作正常 但是我需要确定所有线程何时完成 以便我可
  • click() 事件在 jQuery 中调用两次

    我设置了一个链接元素并在 jQuery 中调用了它的单击事件 但是单击事件调用了两次 请参阅下面的 jQuery 代码 link button button click function attachmentForm slideToggle
  • 使用 Express js、passport 保护 GraphQL 查询

    我已经开始在我的 Express JS 项目中使用 graphql 但我想知道如何保护我的一些 GraphQL 查询 以前我使用 Passport js JWT 来实现此目的 效果很好 确保路线安全确实很容易 但使用 graphql exp
  • html 到 pdf 转换,西里尔字符无法正确显示

    我的 pdf 字体有问题 我使用了一种从 html 生成 pdf 的方法 该方法在我的本地计算机 即 Windows 操作系统 上运行良好 但现在在 Linux 上 西里尔文字显示带有问号 我在那里检查了字体 但结果发现有所需的字体 现在我
  • Laravel 403 之前有效的 API 错误

    截至昨天 下面的代码有效 然而今天 我必须在 laravel 中运行 php artisan config cache 命令 因为我添加了一个包 现在我漂亮的 ionic 应用程序不想运行连接到任何东西 因为我不断收到此 403 错误 在我
  • 我可以在新标签页上运行用户脚本吗?

    我有一个用 TamperMonkey 编写的非常简单的用户脚本 我希望它在 Chrome 新标签页上运行 根据这个网站 https web archive org web 20180126193540 https forum tamperm
  • 获取图像的高度和宽度

    我正在显示一个图像 如果该图像很小 它将填充控制区域的大小 我想显示实际情况original图像的宽度和高度 我怎样才能做到这一点 图像源宽度 http msdn microsoft com en us library system win
  • “使用 auto 说明符声明的变量不能出现在其自己的初始值设定项中”

    使用尾随返回类型时似乎出现错误 Func ptr 的函数指针声明 我知道如果我将声明和初始化放在同一个语句中或者只是通过直接指定返回类型来使用标准声明就可以做到这一点 但我想了解该语言的限制 所以有人可以解释一下这个错误在代码如下 使用 a
  • 如何让 Visual Studio Code 真正显示所有 TypeScript 类型错误?

    在我的 TypeScript React 项目中 react scripts start 显示的类型错误未在我的 Visual Studio Code IDE 中内联显示 大多数类型错误实际上都是内联显示的 但不是全部 原因可能是什么 如何
  • 嵌套指令打破了角度

    每当我在其内部使用指令时 页面就会冻结 并消耗越来越多的 CPU 和 RAM 直到选项卡挂起 我有的是这个 Application Directives directive somed function return restrict E
  • 无法使用 Jersey 服务器加载 JSP 页面

    我的 Web 服务使用 jersey 2 4 无法让主页加载 index jsp 我制作了一个 IndexService POJO 来尝试从那里加载它 但这不起作用 我想只使用主页 而不是使用 IndexService POJO 已到达 P
  • 在Python中从另一个文件导入变量

    我已经声明了一些变量并用一些值初始化它们variables py flag 0 j 1 我想在另一个文件中使用这些值main file py import variables if flag 0 j j 1 但是我收到以下错误 NameEr
  • 如何获取可用 NSFont 系列的列表?

    如何获取可用 NSFont 系列的列表 最好使用 fontName 等效项 NSLog NSFontManager sharedFontManager availableFontFamilies description Gives Abad
  • r dplyr group_by 值折叠并粘贴

    我有一个看起来像这样的数据集 Id Subject Date Vitals Value 10 John 2001 05 29 HeartRate 65 10 John 2001 05 29 HeartRate 68 10 John 2001
  • 在 python 中按第一(或第二,或其他)列对文件进行排序

    这似乎是一个非常基本的问题 但我是Python新手 在花了很长时间尝试自己寻找解决方案之后 我认为是时候询问一些更高级的人了 所以 我有一个文件 样本 ENSMUSG00000098737 95734911 95734973 3 miRNA
  • 当FormArray嵌套在另一个FormArray中时如何获取FormArrayName?

    参考 https angular io docs ts latest api forms index FormArrayName directive html https angular io docs ts latest api form
  • Python:从 Ipywidget 按钮重置 Matplotlib

    在 Jupyter 笔记本中使用 iPyWidgets 和 Matplotlib 时 即使有多个子图以及带有多个滑块的多个变量 也很容易获得实时更新的图形 只需设置一个interact包含激活的绘图函数以及两个滑块变量的构造函数 pylab
  • 如何获取符号链接的绝对路径?

    如何获取符号链接的绝对路径 如果我按照以下方式进行 char buf 100 realpath symlink buf 我不会获得符号链接的绝对路径 但我会获得此符号链接链接到的绝对路径 现在我的问题是 如果我想获取符号链接本身的绝对路径怎