2012-02-03 1 views

ответ

4

Шаг 1: Позвоните link.

Шаг 2: Если он возвращает -1 с errno, установленным на EXDEV, затем сделайте копию.

[обновление]

В общем, нет портативных (и надежный) способ ответить на этот вопрос. Самое близкое, что вы можете получить, я думаю, это позвонить statvfs для источника и адресата, а затем сравнить поля f_fsidstatvfs structures.

К сожалению, POSIX ничего не гарантирует в частности о поле f_fsid. Этот тест должен работать на Linux, если вы, возможно, не спрашиваете о файловых системах, монтируемых NFS ...

+0

Но он создаст жесткую ссылку, и я не хочу этого делать - мне нужно только знать, можно ли это сделать. Также я говорю о командах оболочки :) – Zebooka

1

Nemo's answer действительно самое простое решение: попробуйте link(2) syscall.

Если вы хотите узнать, не трудно ли установить путь, даже если вы не попытаетесь получить нулевой адрес link(2), вы можете найти их файловую систему, например. используя statfs(2), убедитесь, что они находятся в одной файловой системе и проверьте, что тип файловой системы достаточно хорош.

Смежные вопросы