Как проверить в двух путях трудно связать? - PullRequest
2 голосов
/ 03 февраля 2012

У меня есть пути к файлам на одной стороне и их новые пути, где я хочу их дублировать.

Как проверить, могут ли они быть просто жестко связаны или должны быть скопированы?

Ответы [ 2 ]

4 голосов
/ 03 февраля 2012

Шаг 1: Звоните ссылка .

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

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

В общем, нет портативного (и надежного) способа ответить на этот вопрос.Я думаю, что ближе всего можно вызвать statvfs для источника и пункта назначения, а затем сравнить поля f_fsid структур statvfs .

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

1 голос
/ 03 февраля 2012

Ответ Немо - действительно самое простое решение: попробуйте системный вызов link(2).

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

...