Интересно, а почему современные операционные системы не предоставляют возможности писать внутрь файла, раздвигая его? Т.е. запись в режиме insert, а не overwrite?
Полагаю, что все или почти все современные файловые системы могут поддерживать эту операцию с такой же лёгкостью, как и добавление данных в конец файла.
Или это не слишком часто нужно, и можно просто рассчитывать на то, что программа, которой это нужно, будет переписывать весь файл заново, как и происходит на практике?
Полагаю, что все или почти все современные файловые системы могут поддерживать эту операцию с такой же лёгкостью, как и добавление данных в конец файла.
Или это не слишком часто нужно, и можно просто рассчитывать на то, что программа, которой это нужно, будет переписывать весь файл заново, как и происходит на практике?
no subject
Date: 2004-06-16 04:16 am (UTC)Как ето не позволяют?
На любом языке такое можно написать
no subject
Date: 2004-06-16 04:20 am (UTC)no subject
Date: 2004-06-16 04:23 am (UTC)Это дорого.
Date: 2004-06-16 04:23 am (UTC)Re: с такой же лёгкостью
Date: 2004-06-16 04:25 am (UTC)Вот добавление в начало файла - другое дело.
no subject
Date: 2004-06-16 04:33 am (UTC)Стыдно признаться...
Date: 2004-06-16 04:36 am (UTC)Re: Это дорого.
Date: 2004-06-16 04:40 am (UTC)Хотя тогда, наверное, seek делать сложнее будет, и нужно добавлять больше информации куда-нибудь в управляющие структуры... да, надо подумать.
no subject
Date: 2004-06-16 04:41 am (UTC)no subject
Date: 2004-06-16 04:44 am (UTC)В принципе, можно создать FS c возможностью вставки (с файлами, состоящими из записей различной длины). ЕМНИП, такая "файловая система" реализована в PalmOS.
Кстати, в стародавние времена, когда компьютеры были большие, а диски и оперативка - маленькие, существовало изящное решение этой задачки для частного случая текстового редактора (редактирующего текст много больше доступной RAM): начало текста (до текущей позиции) держалось в одном файле (в нормальном порядке), а хвост (от текущей позиции до конца текста) складывался в отдельный файл в обратном порядке. И при передвижении по файлу часть данных перекладывалась из одного файла в другой (из хвоста файла в хвост).
Re: Это дорого.
Date: 2004-06-16 04:49 am (UTC)Кстати, аналогичкая задача - откусовать кусочки от начала файла. Актуальна например при организации очереди. Один мой знакомый такое под DOS делал :-)).
no subject
Date: 2004-06-16 04:58 am (UTC)int fseek(FILE *, long, int);
int fsetpos(FILE *, const fpos_t *);
long ftell(FILE *);
size_t fwrite(const void * __restrict, size_t, size_t, FILE * __restrict);
no subject
Date: 2004-06-16 05:02 am (UTC)no subject
Date: 2004-06-16 05:02 am (UTC)no subject
Date: 2004-06-16 05:03 am (UTC)Re: Это дорого.
Date: 2004-06-16 05:06 am (UTC)no subject
Date: 2004-06-16 05:12 am (UTC)Но кому файлы с дырками нужны, более-менее понятно; кому нужен эффективный append, тоже понятно. Кому нужен insert? Не знаю :)
no subject
Date: 2004-06-16 05:22 am (UTC)Возможно, другим программам, работающим с очень большими файлами, например, видео-редакторам.
no subject
Date: 2004-06-16 05:36 am (UTC)Возможно, XSLT такой in-place editing был бы кстати.
no subject
Date: 2004-06-16 05:53 am (UTC)Можно флаг файлу в INode давать, который будет говорить можноего инсерт или нет.
no subject
Date: 2004-06-16 05:55 am (UTC)Текстовики, например xml-word документ.
no subject
Date: 2004-06-16 05:56 am (UTC)no subject
Date: 2004-06-16 06:02 am (UTC)В смысле - когда этот пресловутый insert пойдет в ход в промышленых количествах, чем этот флаг будет отличаться от read-only прав доступа? :)
no subject
Date: 2004-06-16 06:06 am (UTC)а поподробнее?
Date: 2004-06-16 06:09 am (UTC)