Как проверить, относится ли символическая ссылка к каталогу - PullRequest
1 голос
/ 09 мая 2019

В настоящее время я перекодирую команду "ls" для изучения. Однако, когда я просматриваю файлы: у меня может быть ошибка, когда я пытаюсь открыть «папку» пути, обозначенного символической ссылкой. Потому что это не каталог (я думал, что все символические ссылки указывают на папки).

Как я могу проверить, указывает ли он на каталог? (Смотрю мануалы, стат, реж ..)

1 Ответ

4 голосов
/ 09 мая 2019

Я думал, что все символические ссылки указывают на папки

Нет.Символическая ссылка является косвенной ссылкой на другой путь.Этот другой путь может ссылаться на любой тип файла, который может быть представлен в любой смонтированной файловой системе, или на файл вообще (т. Е. Это может быть неработающая ссылка).

Как проверить, что этоуказывает на каталог?

Вы упомянули функцию stat(), но для переопределения ls вы должны использовать вместо нее lstat().Разница в том, что когда указанный путь ссылается на символическую ссылку, stat возвращает информацию о целевом пути ссылки, тогда как lstat возвращает информацию о самой ссылке (включая информацию о типе файла, из которого вы можете сказать, что она - это ссылка).

В случае, если вы встретите символическую ссылку, вы можете просто проверить тот же путь еще раз с помощью stat(), чтобы узнать, на какой тип файла он указывает.stat() будет рекурсивно разрешать символические ссылки, чтобы найти информацию для конечной цели, которая будет символической ссылкой, только если она не работает.В любом случае вам не нужно различать неработающую ссылку и любую другую форму не-каталога для вашей конкретной цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...