【发布时间】:2015-03-28 22:26:21
【问题描述】:
该文件仅包含相同类型的结构 (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 重新打开原始文件并将内容写回。
您能告诉我什么是正确的解决方案吗?
【问题讨论】:
-
你真的应该使用
stat()或lstat()而不是像那样计算文件中的字节数...... -
次要:如果不覆盖原始计划,默认计划会更好。而是创建第二个文件。成功后,删除原件。这允许在步骤失败时提供更多恢复路径。
标签: c linux file-io system-calls