Почему C readlink() имеет ELOOP в качестве возможной ошибки

Фон

Я читал об Открытой Спецификации Группы о readlink (), и есть ошибка, названная ELOOP, что означает "В символьных ссылках, встречающихся при разрешении аргумента пути, существует цикл", поэтому я предполагаю, что эта функция будет продолжать разрешать путь до тех пор, пока не встретится файл без ссылок.

Тем не менее, я сделал эксперимент и обнаружил, что readlink() разрешить только переданное в path аргумент и просто останавливается на этом, но не продолжает разрешать до достижения файла без ссылки.

Моя проблема

  1. Если это для realpath()это имеет смысл иметь ELOOP как возможная ошибка. Но почему ELOOP даже существует для readlink() пока он разрешает путь только один раз?
  2. Я видел это в спецификации "Дополнительное условие ошибки [ELOOP] добавлено для согласования с черновым стандартом IEEE P1003.1a", означает ли это поведение readlink() (продолжает ли он разрешаться до достижения файла без ссылки) зависит от реализации?

моя версия gcc 8.2.1

1 ответ

Решение

readlink дает вам непосредственную цель символической ссылки. Но что, если для разрешения пути к символической ссылке используется другая символическая ссылка?

принимать readlink("/foo/bar") В качестве примера. Предполагается вернуть цель ссылки bar, но если /foo символическая ссылка, указывающая на себя, вы получите ELOOP так как readlink должен разрешить часть каталога, прежде чем перейти к окончательной записи.

Смотрите также man path_resolution,

Другие вопросы по тегам