gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:28:10 25 4
gpt4 key购买 nike

该文件仅包含同类结构(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() 需要文件路径。您需要做的就是决定您的文件应该有多少字节长,然后调用其中之一。

我建议您首先确保文件大小是您所需数据大小的倍数,以确保它可以被截断并在末尾仍然包含完整的数据项。

您可能还想考虑如何处理极端情况,当初始文件大小小于一个数据项的大小,或者为零,或者不是数据项长度字节大小的倍数时。

关于c - 如何使用 C 中的 linux 系统调用删除文件中的最后一个数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29323332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com