如何在 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) 因为那是 objective.
我尝试了很多方法,但我找不到一个可行的解决方案,只有这个:
将除最后一个mydata之外的所有内容写入一个临时文件,并用O_TRUNC oflag重新打开原始文件并将内容写回。
你能告诉我正确的解决方案是什么吗?
对于 linux 特别是 ftruncate() 需要文件描述符和 truncate() 需要文件路径。您需要做的就是决定您的文件应该有多少字节长,然后调用其中之一。
我建议您首先确保文件大小是您所需数据大小的倍数,以确保它可以被截断并在末尾仍然包含完整的数据项。
您可能还想考虑如何处理极端情况,即初始文件大小小于一个数据项的大小、零或不是数据项长度字节数的倍数。
该文件仅包含同类结构 (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) 因为那是 objective.
我尝试了很多方法,但我找不到一个可行的解决方案,只有这个:
将除最后一个mydata之外的所有内容写入一个临时文件,并用O_TRUNC oflag重新打开原始文件并将内容写回。
你能告诉我正确的解决方案是什么吗?
对于 linux 特别是 ftruncate() 需要文件描述符和 truncate() 需要文件路径。您需要做的就是决定您的文件应该有多少字节长,然后调用其中之一。
我建议您首先确保文件大小是您所需数据大小的倍数,以确保它可以被截断并在末尾仍然包含完整的数据项。
您可能还想考虑如何处理极端情况,即初始文件大小小于一个数据项的大小、零或不是数据项长度字节数的倍数。