Мне нужно удалить последние n символов из файла с помощью C-кода. В кулаке я пытался использовать '\ b', но он возвращает ошибку сегментации. Я видел интересные ответы на похожие вопросы here и here, но я бы предпочел использовать функцию mmap
для этого, если это возможно. Я знаю, что было бы проще обрезать файл, создав временный файл, и написание символов до temp до некоторого смещения исходного файла. Проблема в том, что я не понимаю, как использовать функцию mmap
для этого, не могу видеть, какие параметры мне нужно передать этой функции, особенно address
, length
и offset
. Из того, что я прочитал, я должен использовать MAP_SHARED
в flags
и PROT_READ|PROT_WRITE
в protect
.C Удалить последние n символов из файла
Определение функции говорит:
void * mmap (void *address, size_t length, int protect, int flags, int filedes, off_t offset)
Вот моя главная:
int main(int argc, char * argv[])
{
FILE * InputFile;
off_t position;
int charsToDelete;
if ((InputFile = fopen(argv[1],"r+")) == NULL)
{
printf("tdes: file not found: %s\n",argv[1]);
}
else
{
charsToDelete = 5;
fseeko(InputFile,-charsToDelete,SEEK_END);
position = ftello(InputFile);
printf("Pos: %d\n",(int)position);
int i;
//for(i = 0;i < charsToDelete;i++)
//{
// putc(InputFile,'\b');
//}
}
fclose(InputFile);
return 0;
}
I Использовал 'ftruncate (fileno (InputFile), position);' как вы предлагали, и он отлично работал. Благодаря! – anairinac
как бы вы удалили первые n символов? – momosxp
Единственный способ (кроме специального назначения и более сложный метод mmap) удалить последние символы, записанные в файле (например, что делает BACKSPACE в окне терминала. ++ 1 –