fseek(...)
- вызов библиотеки, а не системный вызов ОС. Это библиотека времени выполнения, которая заботится о фактических накладных расходах, связанных с системным вызовом ОС, с технической точки зрения, fseek косвенно делает вызов системе, но на самом деле это не так (это выявляет четкое различие между различия между вызовом библиотеки и системным вызовом). fseek(...)
является стандартной функцией ввода-вывода независимо от базовой системы ... однако ... и это большая однако ...
ОС будет более чем вероятно, что в кэше файл в памяти ядра , то есть прямое смещение к местоположению на диске, где хранятся 1 и 0, именно через уровни ядра ОС, более чем вероятно, самый верхний слой в ядре, который будет иметь моментальный снимок того, что файл состоит из, т. е. данных независимо от того, что он содержит (это не имеет значения в любом случае, если «указатели» на структуру диска для этого смещения на lcoation на диске действительны!) ...
Когда возникает fseek(..)
, там woul d было много чрезмерно, косвенно, ядро делегировало задачу чтения с диска, в зависимости от того, насколько фрагментирован файл, это может быть теоретически «повсюду», что может быть значительным над головой с точки зрения необходимости, с точки зрения пользователя, то есть кода С, делающего fseek(...)
, он может рассеиваться повсюду, чтобы собрать данные в «один непрерывный вид данных», и впредь, вставляя в в середине файла (помните, что на этом этапе ядро должно было бы отрегулировать местоположение/смещения в фактическом диске для данных) будет считаться медленнее, чем добавление к концу файла.
Причина в том, что ядро «знает», что было последним смещением, и просто стереть маркер EOF и вставить больше данных, за кулисами, ядро, необходимо выделить еще один блок памяти для дисковый буфер с отрегулированным смещением к месту на диске после маркера EOF, как только добавление данных будет завершено.
Использование fseek() et al. Вы просто не можете вставлять данные в середине файла, поэтому ваш вопрос спорный. – 2010-03-13 16:17:40
Вы можете просто не вставлять данные в середину файла (насколько вы не можете удалить что-то с начала или в середине файла). Лучшее, что вы можете сделать, это переписать данные в середине файла. – dmeister