URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8570
[ Назад ]

Исходное сообщение
"вставка данных в файл"

Отправлено ghost_in_machine , 28-Дек-09 05:02 
Здравствуйте!
С Рождеством/Новым Годом!
У меня вопрос: как правильно вписать данные в середину файла под Linux на С? Первый приходящий в голову способ – через буффер физически данные перекопировать со сдвигом на размер вставки. Но, при таком способе файл надо прочитать и записать от места вставки и до EOF (что может быть очень долго).  В то же время на ХДД он физически лежит по фрагментам где придеться. Тоесть не надо его переписывать, надо лишь «подвязвть» фрагмент пустого места как середину файла. Как это сделать (на некий перерасход места на ХДД можно забить ради скорости, проводя перезапись фрагментированного файла в цельный в самом конце работы с ним )?
Спасибо!

Содержание

Сообщения в этом обсуждении
"вставка данных в файл"
Отправлено Pahanivo , 28-Дек-09 09:38 
>[оверквотинг удален]
>на С? Первый приходящий в голову способ – через буффер физически
>данные перекопировать со сдвигом на размер вставки. Но, при таком способе
>файл надо прочитать и записать от места вставки и до EOF
>(что может быть очень долго).  В то же время на
>ХДД он физически лежит по фрагментам где придеться. Тоесть не надо
>его переписывать, надо лишь «подвязвть» фрагмент пустого места как середину файла.
>Как это сделать (на некий перерасход места на ХДД можно забить
>ради скорости, проводя перезапись фрагментированного файла в цельный в самом конце
>работы с ним )?
>Спасибо!

файл все равно придется полность переписать


"вставка данных в файл"
Отправлено ghost_in_machine , 28-Дек-09 21:32 
>файл все равно придется полность переписать

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


"вставка данных в файл"
Отправлено аноним , 28-Дек-09 22:58 
> Как это сделать

Никак. Только читать файл целиком.


"вставка данных в файл"
Отправлено ghostinmachine , 29-Дек-09 00:56 
>> Как это сделать
>
>Никак. Только читать файл целиком.

Спастбо за ответ. Так что получаеться, надо разрабатывать свою ФС и форматить нею файл что бы запись в его конец означала запись в его середину??! И никакого нормального способа это сделать средствами ОС нет???



"вставка данных в файл"
Отправлено Pahanivo , 29-Дек-09 14:11 
>>> Как это сделать
>>
>>Никак. Только читать файл целиком.
>
>Спастбо за ответ. Так что получаеться, надо разрабатывать свою ФС и форматить
>нею файл что бы запись в его конец означала запись в
>его середину??! И никакого нормального способа это сделать средствами ОС нет???
>

ты че за дрянь куришь?
ознакомся с понятием файла и тем как он распологается в файловой системе


"вставка данных в файл"
Отправлено аноним , 29-Дек-09 15:35 
>Спастбо за ответ. Так что получаеться, надо разрабатывать свою ФС и форматить
>нею файл что бы запись в его конец означала запись в
>его середину??!

Ну можешь перелопатить существующую ФС и добавить туда такую возможность, но я бы предложил вместо этого начать думать головой.

>И никакого нормального способа это сделать средствами ОС нет???

Разумеется, нет.


"вставка данных в файл"
Отправлено jd , 29-Дек-09 14:44 
В POSIX системе такое сделать нельзя. Даже если свою ФС разработать - подобной операции не предусмотрено, следовательно придётся ещё свои системные вызовы добавлять. То есть, нестандартной будет не только ФС (драйвер для неё), но и каждая программа, использующая данную фичу, потребует поддержки этого нестандартного решения. Не думаю, что всё это хоть как-то оправдано.

"вставка данных в файл"
Отправлено ghost_in_machine , 30-Дек-09 00:25 
Всем спастбо за ответы.  Говоря о ФС я имел ввиду скорее некую форматировку самого файла, в простейшем случае указывать offset на следующий блок там через каждые N Кб данных  (кто ж решиться на такой титанический труд как собрать свою ФС), вероятно надо было взять ФС в кавычки. Тем не менее идею я понял – POSIX такого не предусматривает (Pahanivo, ну неужели это нельзя было сказать так просто (и формально!) без выпендрёжа и размышлений о том, что я курю?). Всем спасибо, тема закрыта.

"вставка данных в файл"
Отправлено anonymous , 30-Дек-09 02:51 
>Всем спастбо за ответы.  Говоря о ФС я имел ввиду скорее
>некую форматировку самого файла, в простейшем случае указывать offset на следующий
>блок там через каждые N Кб данных  (кто ж решиться
>на такой титанический труд как собрать свою ФС), вероятно надо было
>взять ФС в кавычки. Тем не менее идею я понял –
>POSIX такого не предусматривает (Pahanivo, ну неужели это нельзя было сказать
>так просто (и формально!) без выпендрёжа и размышлений о том, что
>я курю?). Всем спасибо, тема закрыта.

фактически вы хотите, чтобы файлы были не бесструктурные.  в files-11 такое есть, но не уверен, что вам оно надо :-)


"вставка данных в файл"
Отправлено ghost_in_machine , 30-Дек-09 03:37 

>фактически вы хотите, чтобы файлы были не бесструктурные.  в files-11 такое
>есть, но не уверен, что вам оно надо :-)

Ну с поправкой на масштаб (мне то надо всего 1 функция – быстрая запись в середину файла) то идея та...  Спасибо, было инетерсно ознакомиться с files11, правда то что мне было нужно уже озвучил товарищ dj.
Хотя странно как-то  что такая не лишняя опция осталась без внимания разрабочков ФС.