2014-09-30 4 views
2

Я знаю, что такое sparse file, но я не могу понять, как и почему программа, такая как lastlog, предпочла бы такой файл над обычным файлом.Почему программа хочет/предпочитает использовать разреженный файл?

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

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

ответ

1

Файл /var/log/lastlog содержит информацию о последнем входе в систему для каждого пользователя, организованном uid. Если uid не используется или пользователь никогда не вошел в систему, то данные не будут храниться в разреженном файле для этой записи.

Если в нумерации uid имеются большие пробелы в /etc/passwd, то в файле /var/log/lastlog будут соответственно большие пробелы.

Эта структура позволяет нескольким lastlog процессам получать или обновлять файл одновременно без блокировки или риска повреждения. С более сложной файловой структурой для предотвращения повреждения при обновлении файла должны быть блокировки. И блокировка во время входа в систему не является хорошей идеей.

+0

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

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