0

背景

我阅读了关于readlink()的开放组规范,并且有一个名为 的错误ELOOP,它表明“在解析路径参数期间遇到的符号链接中存在循环。”,所以我假设这个函数将继续路径解析,直到遇到非链接文件。

但是,我做了一个实验,发现readlink()只解析传入的path参数并停在那里,但直到到达非链接文件才继续解析。

我的问题

  1. 如果是 for ,那么将其视为可能的错误realpath()是有道理的。ELOOP但是为什么它只ELOOP存在一次路径呢?readlink()
  2. 我在规范中看到了这一点“添加了 [ELOOP] 可选错误条件以符合 IEEE P1003.1a 草案标准”,这是否意味着readlink()(是否一直解析直到到达非链接文件)的行为取决于实现?

我的 gcc 版本是8.2.1

4

1 回答 1

2

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

readlink("/foo/bar")个例子。它应该返回的链接目标bar,但如果/foo是一个指向自身的符号链接,你会得到ELOOP,因为readlink必须在到达最终条目之前解析目录部分。

另请参阅man path_resolution

于 2018-11-10T14:03:02.783 回答