C 如何在没有文件名的情况下删除文件内容?

C 如何在没有文件名的情况下删除文件内容?,c,file-io,C,File Io,我有一个函数,它接收一个文件指针(file*file)并复制该文件中的所有内容。现在,是否可以删除此文件中的所有内容 我没有文件名,因此无法再次使用fopen(文件名,“w”) 我已经包括了stdio.h和string.h 您可以使用ftruncate()系统调用来使用文件描述符清空文件,例如 ftruncate(fileno(fh), 0); 您可能希望在这之后调用倒带(fh),以便对文件的任何进一步写入都是在开始时进行的,而不是在以前的偏移量。您可以使用ftruncate()系统调用使用文

我有一个函数,它接收一个文件指针(
file*file
)并复制该文件中的所有内容。现在,是否可以删除此文件中的所有内容

我没有文件名,因此无法再次使用
fopen(文件名,“w”)


我已经包括了
stdio.h
string.h

您可以使用
ftruncate()
系统调用来使用文件描述符清空文件,例如

ftruncate(fileno(fh), 0);

您可能希望在这之后调用
倒带(fh)
,以便对文件的任何进一步写入都是在开始时进行的,而不是在以前的偏移量。

您可以使用
ftruncate()
系统调用使用文件描述符清空文件,例如

ftruncate(fileno(fh), 0);

您可能希望在这之后调用
倒带(fh)
,以便在开始时对文件进行进一步写入,而不是在以前的偏移量。

我不同意向下投票。这是一件有趣的事。
倒带(fp);fprintf(fp,“”)
@stackptr:您显示的代码片段不会在文件开头写入任何内容。没有一个字节被截断。我不同意向下投票。这是一件有趣的事。
倒带(fp);fprintf(fp,“”)
@stackptr:您显示的代码片段不会在文件开头写入任何内容。没有一个字节被截断。可能值得一提的是,
ftruncate()
是在
unistd.h
中原型化的。只是为了确保:不使用unistd.h函数就不可能擦除文件。如果有某种方法可以使用stdio,我不会感到惊讶,但如果有,它远不如这种方式明显。@RuSLDS:同样,截断也不是(物理上)擦除。该文件的数据仍在磁盘上,只有在可能发生这种情况时才有被覆盖的权限。@alk从软件的角度来看,该文件的内容消失了。事实上,它可能仍然存在于存储设备上,这是一个令人困惑的问题。值得一提的是,
ftruncate()
是在
unistd.h
中原型化的。只是为了确保:不使用unistd.h函数不可能擦除文件。如果有什么方法可以使用stdio,但是,如果有,它远没有这种方式明显。@RuSLDS:同样,截断也不是(物理上)擦除。该文件的数据仍在磁盘上,只有在可能发生这种情况时才有被覆盖的权限。@alk从软件的角度来看,该文件的内容消失了。事实上,它可能仍然存在于存储设备上,这是一个令人困惑的问题。