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