[英]How to delete the last data in a file with linux system calls in C?
该文件仅包含相同种类的结构(mydata)。
我尝试了这个:
int counter,file;
file = open(filename, O_RDWR, S_IRUSR | S_IWUSR);
// some error handling
// let's go to the end of the file
while(read(file,&mydata,sizeof(mydata))>0) counter++;
// let's go one step back
lseek(file,-sizeof(mydata),SEEK_CUR);
// delete the last data
write(file,NULL,sizeof(obs)); // it's not working :(
close(file);
我必须使用linux系统调用( http://codewiki.wikidot.com/system-calls ),因为这是目标。
我尝试了许多方法,但仅此方法找不到有效的解决方案:
将除最后一个mydata之外的所有内容都写入一个临时文件中,然后使用O_TRUNC oflag重新打开原始文件,然后将内容写回。
您能告诉我什么是正确的解决方案吗?
专门针对linux,有ftruncate()需要文件描述符,而truncate()需要文件路径。 您需要做的就是确定文件应有多少字节,然后调用其中之一。
我建议您首先确保文件大小是所需数据大小的倍数,以确保可以将其截断并在最后保留完整的数据项。
当初始文件大小小于一个数据项的大小,或小于零或不是数据项长度的大小(以字节为单位)的倍数时,您可能还需要考虑如何处理特殊情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.