Здравствуйте!
С Рождеством/Новым Годом!
У меня вопрос: как правильно вписать данные в середину файла под Linux на С? Первый приходящий в голову способ – через буффер физически данные перекопировать со сдвигом на размер вставки. Но, при таком способе файл надо прочитать и записать от места вставки и до EOF (что может быть очень долго). В то же время на ХДД он физически лежит по фрагментам где придеться. Тоесть не надо его переписывать, надо лишь «подвязвть» фрагмент пустого места как середину файла. Как это сделать (на некий перерасход места на ХДД можно забить ради скорости, проводя перезапись фрагментированного файла в цельный в самом конце работы с ним )?
Спасибо!
>[оверквотинг удален]
>на С? Первый приходящий в голову способ – через буффер физически
>данные перекопировать со сдвигом на размер вставки. Но, при таком способе
>файл надо прочитать и записать от места вставки и до EOF
>(что может быть очень долго). В то же время на
>ХДД он физически лежит по фрагментам где придеться. Тоесть не надо
>его переписывать, надо лишь «подвязвть» фрагмент пустого места как середину файла.
>Как это сделать (на некий перерасход места на ХДД можно забить
>ради скорости, проводя перезапись фрагментированного файла в цельный в самом конце
>работы с ним )?
>Спасибо!файл все равно придется полность переписать
>файл все равно придется полность переписатьспасибо за ответ. Я не совскм понял что Ваше утверждение должно значить, но если Вы о финальной перезапись фрагментированного файла, то тут нет проблем т.к. общая работа больше не зависит (мало зависит) от количества и места вставок.
> Как это сделатьНикак. Только читать файл целиком.
>> Как это сделать
>
>Никак. Только читать файл целиком.Спастбо за ответ. Так что получаеться, надо разрабатывать свою ФС и форматить нею файл что бы запись в его конец означала запись в его середину??! И никакого нормального способа это сделать средствами ОС нет???
>>> Как это сделать
>>
>>Никак. Только читать файл целиком.
>
>Спастбо за ответ. Так что получаеться, надо разрабатывать свою ФС и форматить
>нею файл что бы запись в его конец означала запись в
>его середину??! И никакого нормального способа это сделать средствами ОС нет???
>ты че за дрянь куришь?
ознакомся с понятием файла и тем как он распологается в файловой системе
>Спастбо за ответ. Так что получаеться, надо разрабатывать свою ФС и форматить
>нею файл что бы запись в его конец означала запись в
>его середину??!Ну можешь перелопатить существующую ФС и добавить туда такую возможность, но я бы предложил вместо этого начать думать головой.
>И никакого нормального способа это сделать средствами ОС нет???
Разумеется, нет.
В POSIX системе такое сделать нельзя. Даже если свою ФС разработать - подобной операции не предусмотрено, следовательно придётся ещё свои системные вызовы добавлять. То есть, нестандартной будет не только ФС (драйвер для неё), но и каждая программа, использующая данную фичу, потребует поддержки этого нестандартного решения. Не думаю, что всё это хоть как-то оправдано.
Всем спастбо за ответы. Говоря о ФС я имел ввиду скорее некую форматировку самого файла, в простейшем случае указывать offset на следующий блок там через каждые N Кб данных (кто ж решиться на такой титанический труд как собрать свою ФС), вероятно надо было взять ФС в кавычки. Тем не менее идею я понял – POSIX такого не предусматривает (Pahanivo, ну неужели это нельзя было сказать так просто (и формально!) без выпендрёжа и размышлений о том, что я курю?). Всем спасибо, тема закрыта.
>Всем спастбо за ответы. Говоря о ФС я имел ввиду скорее
>некую форматировку самого файла, в простейшем случае указывать offset на следующий
>блок там через каждые N Кб данных (кто ж решиться
>на такой титанический труд как собрать свою ФС), вероятно надо было
>взять ФС в кавычки. Тем не менее идею я понял –
>POSIX такого не предусматривает (Pahanivo, ну неужели это нельзя было сказать
>так просто (и формально!) без выпендрёжа и размышлений о том, что
>я курю?). Всем спасибо, тема закрыта.фактически вы хотите, чтобы файлы были не бесструктурные. в files-11 такое есть, но не уверен, что вам оно надо :-)
>фактически вы хотите, чтобы файлы были не бесструктурные. в files-11 такое
>есть, но не уверен, что вам оно надо :-)Ну с поправкой на масштаб (мне то надо всего 1 функция – быстрая запись в середину файла) то идея та... Спасибо, было инетерсно ознакомиться с files11, правда то что мне было нужно уже озвучил товарищ dj.
Хотя странно как-то что такая не лишняя опция осталась без внимания разрабочков ФС.