Tag: truncate

C从文件中删除最后n个字符

我需要使用C代码从文件中删除最后n个字符。 首先我试图使用’\ b’,但它返回一个分段错误。 我在这里和这里看到了类似问题的有趣答案,但我更愿意使用mmap函数来做到这一点,如果可能的话。 我知道通过创建临时文件来截断文件,并将chars写入temp直到原始文件的某个偏移量可能更简单。 问题是我似乎不明白如何使用mmap函数来做到这一点,看不出我需要传递给那个函数的参数,特别是address , length和offset 。 从我读过的内容来看,我应该在flags使用MAP_SHARED在PROT_READ|PROT_WRITE使用PROT_READ|PROT_WRITE 。 函数定义说: 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]); } […]

如何在c中完美截断字符串?

我正在读取一个文件,其中每行超过63个字符,我希望字符被截断为63.但是,它无法截断从文件中读取的行。 在这个程序中,我们假设文件只有10行: #include #include int main(void) { char a[10][63]; char line[255]; int count = 0; //Open file FILE *fp; fp = fopen(“lines.dat”, “r”); //Read each line from file to the “line array” while(fgets(line, 255,fp) != NULL) { line[63] = ‘\0’; //copy the lines into “a array” char by char int x; for(x = 0; x […]

在“r +”模式下打开时,在C中清除/截断文件

我的代码目前看起来像这样(这些步骤分为多个函数): /* open file */ FILE *file = fopen(filename, “r+”); if(!file) { /* read the file */ /* modify the data */ /* truncate file (how does this work?)*/ /* write new data into file */ /* close file */ fclose(file); } 我知道我可以在”w”模式下打开文件,但在这种情况下我不想这样做。 我知道在unistd.h / sys/types.h有一个函数ftruncate ,但是我不想使用这些函数,我的代码应该是高度可移植的(在windows上也是如此)。 是否有可能在不关闭/重新打开文件的情况下清除文件?