Всякий раз, когда я перечисляю содержимое каталога с помощью функции readdir, имена возвращаемых файлов также включают «.». а также "..". У меня есть подозрение, что это только обычные ссылки в файловой системе и поэтому неотличимы от реальных файлов, но мне всегда приходится их отфильтровывать, потому что они не являются фактическими объектами в каталоге, который я перечисляю. Есть ли веская причина для таких функций, как readdir, чтобы включить их? Некоторые операционные системы или файловые системы содержат больше или разных имен виртуальных файлов? Есть ли лучший способ отфильтровать их, кроме как путем сравнения строк с «.». а также ".."?Почему списки каталогов содержат текущий (.) И родительский (..) каталог?
Обновление: благодарю вас всех за ответ. Полагаю, я всегда думал, что такие вещи, как ./ и ../, были просто условностями, которые можно было бы решить путем поиска и замены. Я нахожу это немного удивительным, хотя, вероятно, более эффективным и прозрачным, чтобы они были частью самой файловой системы.
Один вопрос остается, однако: с. и .. произвольные имена для этих ссылок, существуют ли файловые системы, которые используют разные?
В Windows,. похоже, является частью PATH неявно, то есть вы можете просто ввести run_this. Будучи привыкшим к этому, я всегда считал, что префикс ./ немного раздражает при использовании Linux, хотя я понимаю его ценность для безопасности. – Lemming 2008-11-27 02:26:47
Я не очень-то думал об ограничениях безопасности, пока это не объяснялось мне в начале этого года. У неприятного пользователя может быть команда в ее каталоге под названием ls, которую администратор может выполнять при навигации по этому каталогу, и эта команда может затем предоставить пользователю дополнительный доступ. Плохо. – 2008-12-11 03:04:52