Файл - это просто серия байтов. Если вы хотите удалить строку, вам придется сдвинуть что-либо после этой строки назад. Я думаю, что то, что вы делаете, просто отлично, но вы также можете перезаписать файл на месте, начиная с строки, которую вы удаляете.
Для этого вам понадобятся два файловых дескриптора, указывающих на файл. Когда вы читаете из второго, вы пишете в первый.
Когда вы закончите, вы можете обрезать файл, чтобы избавиться от лишних данных в конце.