Почему C readlink() имеет ELOOP в качестве возможной ошибки
Фон
Я читал об Открытой Спецификации Группы о readlink (), и есть ошибка, названная ELOOP
, что означает "В символьных ссылках, встречающихся при разрешении аргумента пути, существует цикл", поэтому я предполагаю, что эта функция будет продолжать разрешать путь до тех пор, пока не встретится файл без ссылок.
Тем не менее, я сделал эксперимент и обнаружил, что readlink()
разрешить только переданное в path
аргумент и просто останавливается на этом, но не продолжает разрешать до достижения файла без ссылки.
Моя проблема
- Если это для
realpath()
это имеет смысл иметьELOOP
как возможная ошибка. Но почемуELOOP
даже существует дляreadlink()
пока он разрешает путь только один раз? - Я видел это в спецификации "Дополнительное условие ошибки [ELOOP] добавлено для согласования с черновым стандартом IEEE P1003.1a", означает ли это поведение
readlink()
(продолжает ли он разрешаться до достижения файла без ссылки) зависит от реализации?
моя версия gcc 8.2.1
1 ответ
readlink
дает вам непосредственную цель символической ссылки. Но что, если для разрешения пути к символической ссылке используется другая символическая ссылка?
принимать readlink("/foo/bar")
В качестве примера. Предполагается вернуть цель ссылки bar
, но если /foo
символическая ссылка, указывающая на себя, вы получите ELOOP
так как readlink
должен разрешить часть каталога, прежде чем перейти к окончательной записи.
Смотрите также man path_resolution
,