Получить путь по символической ссылке
Добавлено: 26.05.2024 18:14:32
Доброго времени суток!
подскажите плиз, есть ли стандартная процедура/функция в lazarus, в результате вызова которой я могу получить путь - куда ссылается ссылка.
Как пример:
есть каталог - ссылка /sys/class/net/eth0
он ссылается на /sys/devices/pci0000:00/0000:00:01.3/0000:02:00.2/0000:03:00.0/0000:04:00.0/net/eth0
в программе пробовал получить каталог на который ссылается вышеуказанный через вызов FileGetSymLinkTarget - и получаю относительную ссылку на каталог
т.е. в S - получаю
../../devices/pci0000:00/0000:00:01.3/0000:02:00.2/0000:03:00.0/0000:04:00.0/net/eth0
вместо
/sys/devices/pci0000:00/0000:00:01.3/0000:02:00.2/0000:03:00.0/0000:04:00.0/net/eth0
В модуле sysutils/filutilh.inc - кроме как вышеописанного варианта получения ссылки - нет, а может я просто не понял что есть
Нашел в интернет что в модуле linux есть требуемое
но у меня этот вариант не прокатывает - ругается что нет такого "ReadLink" в модуле linux
да и правда нет там такого, там только futex и прочее, и ничего по поводу ссылок нет
Я сделал получение куда указывает ссылка, через "одно место", а именно вызываю командную строку readlink -f <имя файла>
и она возвращает в stdout нормальный каталог на который ссылается ссылка.
но это както не правильно, на получение такого рода инфы - создавать отдельный процесс и вызывать в нем утилиту линуха.
Подскажите, может есть вариант стандартными библиотечными процедурами/функциями лазаруса - получить таки полный путь куда ссылается ссылка?
подскажите плиз, есть ли стандартная процедура/функция в lazarus, в результате вызова которой я могу получить путь - куда ссылается ссылка.
Как пример:
есть каталог - ссылка /sys/class/net/eth0
он ссылается на /sys/devices/pci0000:00/0000:00:01.3/0000:02:00.2/0000:03:00.0/0000:04:00.0/net/eth0
в программе пробовал получить каталог на который ссылается вышеуказанный через вызов FileGetSymLinkTarget - и получаю относительную ссылку на каталог
- Код: Выделить всё
var s:RawByteString;
SourceName:String;
begin
....
SourceName:='/sys/class/net/eth0';
...
FileGetSymLinkTarget(SourceName,s)
...
т.е. в S - получаю
../../devices/pci0000:00/0000:00:01.3/0000:02:00.2/0000:03:00.0/0000:04:00.0/net/eth0
вместо
/sys/devices/pci0000:00/0000:00:01.3/0000:02:00.2/0000:03:00.0/0000:04:00.0/net/eth0
В модуле sysutils/filutilh.inc - кроме как вышеописанного варианта получения ссылки - нет, а может я просто не понял что есть
Нашел в интернет что в модуле linux есть требуемое
- Код: Выделить всё
uses linux;
Function ReadLink(sympath, buffer:pchar; bufsize:longint):longint;
Function ReadLink(name:pathstr):pathstr;
но у меня этот вариант не прокатывает - ругается что нет такого "ReadLink" в модуле linux
да и правда нет там такого, там только futex и прочее, и ничего по поводу ссылок нет
Я сделал получение куда указывает ссылка, через "одно место", а именно вызываю командную строку readlink -f <имя файла>
и она возвращает в stdout нормальный каталог на который ссылается ссылка.
но это както не правильно, на получение такого рода инфы - создавать отдельный процесс и вызывать в нем утилиту линуха.
Подскажите, может есть вариант стандартными библиотечными процедурами/функциями лазаруса - получить таки полный путь куда ссылается ссылка?