fopen не работает с софтлинком

Linux-красная шляпа

Я запускаю свой двоичный файл с chroot в /var/ROOT/ месте, теперь между двумя файлами есть мягкая ссылка

ln -s /usr/local/rmgr.txt /var/ROOT/usr/local/rmgr.txt

ll /usr/local/rmgr.txt

prw-r--r--    1 root     root            39 Nov 25 12:04 /usr/local/rmgr.txt

ll /var/ROOT/usr/local/rmgr.txt

lrwxrwxrwx    1 root     root           39 Nov 25 12:04 /var/ROOT/usr/local/rmgr.txt -> /usr/local/rmgr.txt

в моем двоичном файле я использовал функцию fopen

fopen("/usr/local/rmgr.txt","r")

но почему-то не получается этот файл!

Error Opening File : /usr/local/rmgr.txt.

person Jatin Bodarya    schedule 25.11.2013    source источник


Ответы (1)


Softlink — это не более чем небольшой текстовый файл, содержащий путь к файлу, на который указывает ссылка. Это означает, что софтлинк не может указывать за пределы тюрьмы chroot() (по определению). Указанный путь будет считан из него и интерпретирован внутри chroot().

Жесткие ссылки и привязки являются специальными объектами файловой системы/ядра, поэтому их можно использовать для доступа к файлам через chroot().

person oakad    schedule 25.11.2013
comment
ln: невозможно создать жесткую ссылку /var/ROOT/usr/local/rmgr.txt' to /usr/local/rmgr.txt': неверная ссылка между устройствами - person Jatin Bodarya; 25.11.2013
comment
Они находятся в одной файловой системе? Я бы предположил, что нет (разные диски или разделы). Таким образом, у вас остается mount --bind (это всегда работает, но работает с каталогами, а не с отдельными файлами). - person oakad; 25.11.2013
comment
mount: /usr/local/ не является блочным устройством - person Jatin Bodarya; 25.11.2013
comment
Почему бы вам не начать с внимательного изучения справочной страницы mount(8)? - person oakad; 25.11.2013