代码之家  ›  专栏  ›  技术社区  ›  David Chen

为什么C readlink()将ELOOP作为一个可能的错误

  •  1
  • David Chen  · 技术社区  · 6 年前

    背景

    我阅读了关于开放组的规范 readlink() ELOOP ,表示“在解析路径参数期间遇到的符号链接中存在循环”。因此,我假设此函数将继续进行路径解析,直到遇到非链接文件。

    然而,我做了一个实验,发现 readlink() 仅解决传入的问题 path 参数,并在那里停止,但在到达非链接文件之前不继续解析。

    我的问题

    1. realpath() ,这就很有意义了 私奔 作为一个可能的错误。但是为什么呢 私奔 readlink() 而它只解析路径一次?
    2. 我在规范“添加[ELOOP]可选错误条件以符合IEEE P1003.1a标准草案”中看到了这一点,这是否意味着

    我的gcc版本是 8.2.1

    1 回复  |  直到 6 年前
        1
  •  2
  •   melpomene    6 年前

    readlink 为您提供符号链接的直接目标。但是,如果解析符号链接的路径涉及到另一个符号链接,该怎么办?

    readlink("/foo/bar") 举个例子。它应该返回目标的链接 bar ,但如果 /foo 是指向自身的符号链接,您将获得 ELOOP 读链接 在进入最终条目之前必须解析目录部分。

    另见 man path_resolution .