Теперь про комп. Встречные вопросы
даже на не плохой машине очевидны зависания при считывании такова объема в память.
пиши свой алгоритм на fseek()/fread()/fwrite(). Читать блоки данных с определённого места, скажем по 4096 байт, и писать их на 10 Mb выше чем они были. Таким образом можно удалить что-то в середине файла. И truncate не забыть сделать, например через truncate() из unistd.h.
Думаю эт то что мне надо спс всем.