Too many levels of symbolic links到底是什么原因?

kongchao1 2013-01-17 04:15:09
当link操作的源文件和目标文件不在同一目录路径下时,有时会出现这个问题。
网上说的无非是使用绝对路径而不是相对路径就好了。
我想问的是,产生这个错误的原因是什么?

在研究fstest测试代码的过程中有这样一段代码:

expect 0 symlink ${n0} ${n1}
expect 0 symlink ${n1} ${n0}
expect ELOOP unlink ${n0}/test
expect ELOOP unlink ${n1}/test
expect 0 unlink ${n0}
expect 0 unlink ${n1}

n0和n1互相链接的时候没有ELOOP错误,但是在其中之一目录下操作时就有了ELOOP错误,在linux下操作这个例子时:
ln -s n0 n1
ln -s n1 n0
unlink n0/test
就会出现:符号连接的层数过多(Too many levels of symbolic links)的错误


posix里面是这样形容ELOOP错误的:

[ELOOP] (为什么n0和n1互相链接不会报loop的错误?)
A loop exists in symbolic links encountered during resolution of the path argument.

[ELOOP] (这应该就是链接层数过多的错误情况)
More than {SYMLOOP_MAX} symbolic links were encountered during resolution of the path argument.
...全文
6131 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
kickxxx 2013-01-18
  • 打赏
  • 举报
回复
这是因为在你创建了一个死循环symlink,kernel在进行路径查找时,进入了synbolic links死循环 至于为什么创建时不报错,那是因为创建时这个死循环还不存在
kickxxx 2013-01-18
  • 打赏
  • 举报
回复
引用 2 楼 kongchao1 的回复:
引用 1 楼 kickxxx 的回复:这是因为在你创建了一个死循环symlink,kernel在进行路径查找时,进入了synbolic links死循环 至于为什么创建时不报错,那是因为创建时这个死循环还不存在 ln -s n0 n1 ln -s n1 n0 创建的时候死循环已经成立了啊?难道是因为这个时候只是简单的link操作,不涉及到链接的解析?……
创建之前没有啊,我猜是的,你看下symlink系统调用的代码吧
kongchao1 2013-01-18
  • 打赏
  • 举报
回复
引用 1 楼 kickxxx 的回复:
这是因为在你创建了一个死循环symlink,kernel在进行路径查找时,进入了synbolic links死循环 至于为什么创建时不报错,那是因为创建时这个死循环还不存在
ln -s n0 n1 ln -s n1 n0 创建的时候死循环已经成立了啊?难道是因为这个时候只是简单的link操作,不涉及到链接的解析?

18,773

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 专题技术讨论区
社区管理员
  • 专题技术讨论区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧