繁体   English   中英

如何在C中使用linux系统调用删除文件中的最后数据?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM