为什么 C readlink() 有 ELOOP 作为可能的错误
Why C readlink() has ELOOP as a possible error
背景
我阅读了关于 readlink() 的 Open Group Specification,并且有一个名为 ELOOP
的错误,它表示 "A loop exists in symbolic links encountered during resolution of the path argument.",所以我假设此函数将继续路径解析,直到遇到一个非link文件。
然而,我做了一个实验,发现 readlink()
只解析传入的 path
参数,然后就停在那里,但不会继续解析,直到到达非 link 文件。
我的问题
- 如果是
realpath()
,那么将 ELOOP
作为可能的错误就很有意义了。但是为什么 ELOOP
甚至存在 readlink()
而它只解析路径一次?
- 我在规范 "The [ELOOP] optional error condition is added to align with the IEEE P1003.1a draft standard" 上看到了这一点,这是否意味着
readlink()
的行为(是否一直解析直到到达非 link 文件)取决于实现?
我的 gcc 版本是 8.2.1
readlink
为您提供符号 link 的直接目标。但是,如果解析到符号 link 的路径涉及另一个 symlink 怎么办?
以readlink("/foo/bar")
为例。它应该 return bar
的 link 目标,但是如果 /foo
是一个指向自身的 symlink,你会得到 ELOOP
因为 readlink
必须在到达最终条目之前解析目录部分。
背景
我阅读了关于 readlink() 的 Open Group Specification,并且有一个名为 ELOOP
的错误,它表示 "A loop exists in symbolic links encountered during resolution of the path argument.",所以我假设此函数将继续路径解析,直到遇到一个非link文件。
然而,我做了一个实验,发现 readlink()
只解析传入的 path
参数,然后就停在那里,但不会继续解析,直到到达非 link 文件。
我的问题
- 如果是
realpath()
,那么将ELOOP
作为可能的错误就很有意义了。但是为什么ELOOP
甚至存在readlink()
而它只解析路径一次? - 我在规范 "The [ELOOP] optional error condition is added to align with the IEEE P1003.1a draft standard" 上看到了这一点,这是否意味着
readlink()
的行为(是否一直解析直到到达非 link 文件)取决于实现?
我的 gcc 版本是 8.2.1
readlink
为您提供符号 link 的直接目标。但是,如果解析到符号 link 的路径涉及另一个 symlink 怎么办?
以readlink("/foo/bar")
为例。它应该 return bar
的 link 目标,但是如果 /foo
是一个指向自身的 symlink,你会得到 ELOOP
因为 readlink
必须在到达最终条目之前解析目录部分。