Как определить, имеют ли два файла общее физическое устройство (в отличие от логического устройства / файловой системы) - PullRequest
1 голос
/ 29 июня 2019

Я буду работать над программой на C, которая сканирует указанные пользователем файлы и деревья каталогов. Чтобы ускорить процесс, я хотел бы воспользоваться преимуществами параллельного чтения с использованием потоков, но вместо этого чтение двух устройств на одном физическом устройстве может значительно замедлить оба чтения. Мне нужно иметь возможность определить, находятся ли пара файлов на одном и том же физическом устройстве, не на том же логическом устройстве. Мне также нужно, чтобы это происходило без использования внешних библиотек или других С-код.

Я знаю, что могу использовать stat(), чтобы узнать, имеют ли два файла общее логическое устройство, но если два файла расположены, например, на. /dev/sda2 и /dev/sda5 и share /dev/sda Я бы хотел сказать, что они совместно используют физическое устройство, даже если stat() скажет, что они находятся на разных «устройствах». В идеале я хотел бы иметь возможность использовать эту кроссплатформенность (Windows, Linux, macOS) и, еще более идеально, работать с такими вещами, как тома md или lvm. К сожалению, единственный способ, которым я могу придумать, - это сложно; например, в Linux я предполагаю, что мне нужно будет встроить в программу специфические для Linux знания (синтаксический анализ sysfs?), поскольку совершенно разные физические тома могут по-прежнему иметь общие номера устройств.

Я нашел ответ Определите, принадлежат ли два файла одному и тому же объему и не является ли он дубликатом. Этот вопрос использует GetVolumeInformation в Windows, и это полезно, но я не знаю эквивалента в Linux или macOS.

Если это не практично, какие альтернативы можно использовать? Сравнительный анализ производительности чтения файла и изменение поведения, если скорость чтения падает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...