andrestudio, ещё раз, как я понял, мы, вроде, не про скомпилированный проект, а про файл-исходник (библиотекуресурсюнитиконку..) в папках разных проектов. А жёсткие ссылки как раз плохая альтернатива мэппингу банально из-за того, что, как помню, блокировка на доступ к файлу происходит сразу на все экземпляры, при монопольном открытии любого из группы. Кстати, ИМХО, это одна из причин малой распространённости этой технологии на практике. Лично я применяю чаще её к неисполнимым второстепенным файлам, которые редко запрашиваются монопольно одновременно из двух мест.
Этот топик читают: Гость
Ответов: 3889
Рейтинг: 362
|
|||
карма: 1 |
|
Разработчик
Ответов: 4698
Рейтинг: 426
|
|||
[offtop]Ого сколько постов, пока я отсутствовал [/offtop]
1nd1g0 писал(а): Я тебе нашёл исходники готовой утилиты на Delphi4 - это прямой порт утилиты Junction Руссиновича, написанной на C.В случае чего, можешь давать исходники и на Си, его я тоже изучал. 1nd1g0 писал(а): Assasin, если уж научили добавлять, то тогда и корректно удалять hard, symbol и junction ссылки надо, ИМХО. А то то же удаление junction-директории под NT5.x может плохо закончиться для файлов внутри либо.Символьные и жесткие линки на файлы удаляются обычным способом, а на папку WinAPI функция и не должна работать. Netspirit писал(а): Так вот вопрос: я могу с помощью предложенных здесь техник создать ссылку на фильм и поместить её в расшаренную папку?Не можешь, как другой комп сможет получить доступ к твоей ФС по расшаренной папке? Ведь символьная ссылка содержит в себе фактически путь к файлу - тот же ярлык виндовский, только на уровне ФС. |
|||
карма: 10 |
|
Разработчик
Ответов: 26149
Рейтинг: 2127
|
|||
1nd1g0 писал(а): блокировка на доступ к файлу происходит сразу на все экземплярыА так и должно быть. Безопасность работает с дескрипторами самих файлов, а не с файловыми ссылками. Естественно, все ссылки унаследуют безопасность |
|||
карма: 22 |
|
Ответов: 4630
Рейтинг: 749
|
|||
Assasin писал(а): символьная ссылка содержит в себе фактически путь к файлуЭ-э-э, погоди. Если моя программа использует API-функции для чтения файла, пользователь подсувает ей жесткую ссылку вместо файла и что, моя программа сама должна вытащить из неё путь к исходному файлу, как из ярлыка? Тогда в чем смысл? По-моему, для моей программы это должно работать прозрачно. |
|||
карма: 26 |
|
Разработчик
Ответов: 4698
Рейтинг: 426
|
|||
Netspirit писал(а): Э-э-э, погоди. Если моя программа использует API-функции для чтения файла, пользователь подсувает ей жесткую ссылку вместо файла и что, моя программа сама должна вытащить из неё путь к исходному файлу, как из ярлыка?Ты задал верный вопрос: Netspirit писал(а): Тогда в чем смысл?Не было бы смысла, не делали бы таких ссылок, вывод (ведь так и есть на самом деле), все это работает Netspirit писал(а): прозрачно. |
|||
карма: 10 |
|
Разработчик
Ответов: 26149
Рейтинг: 2127
|
|||
Ага, мяго переехали от HardLink-a к "символьным ссылкам". А это не совсем одно и то же
Wiki писал(а): В связи с тем что жесткие ссылки ссылаются на индексный дескриптор, уникальный в пределах дискового раздела, создание жесткой ссылки на файл в каталоге другого раздела невозможно. Для преодоления этого ограничения используются символьные ссылкиwiki писал(а): Символьная ссылка (также симлинк от англ. Symbolic link, символическая ссылка) — специальный файл в файловой системе, для которого не формируются никакие данные, кроме одной текстовой строки с указателем. Эта строка трактуется как путь к файлу, который должен быть открыт при попытке обратиться к данной ссылке (файлу). Символьная ссылка занимает ровно столько места на файловой системе, сколько требуется для записи её содержимого (нормальный файл занимает как минимум один блок раздела).
Целью ссылки может быть любой объект — например, другая ссылка, файл, папка, или даже несуществующий файл (в последнем случае при попытке открыть его должно выдаваться сообщение об отсутствии файла). Ссылка, указывающая на несуществующий файл, называется висячей Короче, HardLink -- запись в таблице MFT, а "символьная ссылка" -- "ярлык" |
|||
карма: 22 |
|
Разработчик
Ответов: 4698
Рейтинг: 426
|
|||
Assasin писал(а): Не можешь, как другой комп сможет получить доступ к твоей ФС по расшаренной папке?Хотя зря я дал такой ответ, с символьными ссылками действительно это скорее всего возможно, вобщем нужно попробовать, научный метод тыка тебе в помощь ------------ Дoбавленo в 12.37: nesco писал(а): Короче, HardLink -- запись в таблице MFT, а "символьная ссылка" -- "ярлык"...А "символьная ссылка" -- "ярлык в таблице MFT". Почему? Попробуй создать символьную ссылку на любой файл, она будет занимать на жестком диске ровно 0 байт => путь к файлу находится в самой таблице. |
|||
карма: 10 |
|
Разработчик
Ответов: 26149
Рейтинг: 2127
|
|||
И нафига тут API, когда все можно делать при помощи командного процессора
|
|||
карма: 22 |
|
Разработчик
Ответов: 4698
Рейтинг: 426
|
|||
nesco писал(а): И нафига тут API, когда все можно делать при помощи командного процессора Ага, привет тебе от XP |
|||
карма: 10 |
|
Разработчик
Ответов: 26149
Рейтинг: 2127
|
|||
Assasin писал(а): А "символьная ссылка" -- "ярлык в таблице MFT"Не обязательно, ты Маркса плохо читаешь, невнимательно Wiki писал(а): Целью ссылки может быть любой объект — например, другая ссылка, файл, папка, или даже несуществующий файлЯ специально отметил "другая ссылка", а эта "другая ссылка" может ссылаться еще на одну "другую ссылку", и где там конкретно написано, что она должна обязательно ссылаться на HardLink |
|||
карма: 22 |
|
Разработчик
Ответов: 4698
Рейтинг: 426
|
|||
nesco, Я о символьной ссылке
|
|||
карма: 10 |
|
Разработчик
Ответов: 26149
Рейтинг: 2127
|
|||
Assasin писал(а): Ага, привет тебе от XPА что, в WinXP доступно API для создания настоящих символьных ссылок, не NTFS junction point ------------ Дoбавленo в 12.46: Assasin писал(а): Я о символьной ссылкеИ я о ней же -- http://ru.wikipedia.org/wiki/Символьная_ссылка Моя выдержка именно оттуда |
|||
карма: 22 |
|
Разработчик
Ответов: 4698
Рейтинг: 426
|
|||
nesco писал(а): А что, в WinXP доступно APIВ том то и дело, что API в XP нету для символьных ссылок, придется писать ручками. nesco писал(а): настоящих символьных ссылок, не NTFS junction pointГм, мне кажется, или это эквивалентные понятия? ------------ Дoбавленo в 12.47: nesco писал(а): И я о ней же -- http://ru.wikipedia.org/wiki/Символьная_ссылкаМоя выдержка именно оттуда Я тоже это читал ------------ Дoбавленo в 12.49: Assasin писал(а): А "символьная ссылка" -- "ярлык в таблице MFT"Что мешает в самой таблице записать путь к файлу, на который данная ссылка ссылается? Это и место экономит на диске и быстрее по доступу, поэтому именно так и сделали. |
|||
карма: 10 |
|
Разработчик
Ответов: 26149
Рейтинг: 2127
|
|||
Assasin писал(а): Что мешает в самой таблице записать путь к файлу, на который данная ссылка ссылается? Это и место экономит на диске и быстрее по доступу, поэтому именно так и сделалиТе, ты хочешь сказать, что создается еще один HardLink и на него ссылается "символьная ссылка", а зачем, когда один HardLink есть всегда, достаточно создать файл "символьной ссылки", в котором прописать путь нужно HardLink-a |
|||
карма: 22 |
|
Ответов: 3889
Рейтинг: 362
|
|||
Assasin, Как я помню, точки монтирования (Junction Points) работают на родственном монтированию в папку содержимого какого-либо диска механизме. Только тут "монтируется" не диск, а другая папка. Логически это похоже на символьную ссылку, технически же папка действительно существует (в отличие от символической ссылки), но в скрытом файловом потоке к ней приписана особая структура, обрабатываемая фильтр-драйвером файловой системы, прозрачно подменяющим обращения к физическому содержимому папки на содержимое пути, прописанного в скрытой структуре. Путь не ограничен одним разделом.
Что интересно, такую же структуру, теоретически, можно приписать и обычному файлу (а папка, собственно, тоже файл). Помню, вирусы такие ловил, с мудрёными файловыми потоками для самосокрытия. |
|||
карма: 1 |
|