Привет, Бойко! Я погуглил немного. Оказывается, realpath — это ещё и системный вызов: http://www.opennet.ru/man.shtml?topic=realpath&category=3&russian=5 http://www.opennet.ru/man.shtml?topic=realpath&category=3&russian=2
Для Windows с аналогичной функцией проблемы. Функция GetFinalPathNameByHandle появилась только в Windows Vista: https://technet.microsoft.com/ru-ru/office/aa364962(v=vs.110) В более ранних системах для похожей цели требовались пляски с отображением файла на память: https://technet.microsoft.com/ru-ru/office/aa366789(v=vs.110) http://www.vsokovikov.narod.ru/New_MSDN_API/Menage_files/obtain_name.htm Причём я не уверен, что оба способа дают именно «каноническое» имя файла. Нужно экспериментировать. Есть более универсальный путь. И POSIX, и Windows позволяют сверить на равенство два файла по номеру устройства и номеру файла в устройстве. На POSIX это системный вызов stat и поля st_dev, st_ino: http://www.opennet.ru/man.shtml?topic=stat&category=2&russian=2 На Windows это примерный аналог stat, GetFileInformationByHandle, поля dwVolumeSerialNumber, nFileIndexHigh, nFileIndexLow: https://technet.microsoft.com/ru-ru/office/aa364952(v=vs.110) https://technet.microsoft.com/ru-ru/office/aa363788(v=vs.110) Могут ли в системе появиться два устройства с одним dwVolumeSerialNumber — хз. По-моему, не могут, я вроде наблюдал такую ошибку в оснастке «Управление дисками». Наверное, буду идентифицировать по устройству/индексу. Спасибо за мысль порыться в API, Александр Коновалов -----Original Message----- From: Boyko Bantchev [mailto:[email protected]] Sent: Friday, July 27, 2018 7:02 PM To: [email protected] Subject: Re: Как мне сделать динамическую загрузку модулей? > Но вот как понять, что он уже был загружен? По пути к файлу это > сделать сложно. На UNIX-системах один и тот же файл может быть > доступен как subdir/filename, ./subdir/./././filename > /home/user/subdir/filename, /home//user///subdir////filename, > /home/otheruser/../user/otherdir/../subdir/filename и т.д. На Windows > ещё > веселее: добавляются тонкости с регистром символов в именах, > синонимичность / и \ и текущие папки на разных дисках. Эмулировать всё > это слишком громоздко и тем самым некрасиво. Привет, Александр! Мне кажется, что полное, «каноническое» имя файла, без всяких релятивностей, symlinks и пр. вариаций, можно добить средствами самой о.с. То, что в bash, например, делает realpath.
