假设我有一个文件流。
FILE *fp = fopen("hi.txt", "w");
fprintf(fp, "test");
我想以某种方式再次打开它,但我也想清空它,但这次我无权访问文件名。我尝试执行以下操作,但它似乎并没有改变输出。
fp = freopen(NULL, "w", fp);
fprintf(fp, "changed");
fflush(fp);
它仍然在输出文件中显示“test”。
最佳答案
尝试以下操作。基本思想是从流中获取文件描述符,但您仍然需要关闭流,所以我复制文件描述符,彻底关闭流,然后在复制的文件描述符上调用 ftruncate,绕过流。
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main()
{
FILE *fp;
int fd;
int fd2;
fp = fopen("junk.txt", "w");
fprintf(fp, "foo\n");
fd = fileno(fp);
fd2 = dup(fd);
fclose(fp);
ftruncate(fd2, 0);
close(fd2);
return 0;
}
关于c - 如何重新打开文件流并在没有文件名的情况下清空它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33860588/