c-如何重新打开文件流并在没有文件名的情况下清空它



假设我有一个文件流。

FILE *fp = fopen("hi.txt", "w");
fprintf(fp, "test");

我想以某种方式再次打开它,但我也想清空它,而且这次我没有访问文件名的权限。我试着做了以下操作,但似乎并没有改变输出。

fp = freopen(NULL, "w", fp);
fprintf(fp, "changed");
fflush(fp);

它仍然在输出文件中显示"测试"。

尝试以下操作。基本思想是从流中获取文件描述符,但您仍然需要关闭流,所以我重复文件描述符,干净地关闭流,然后对重复的文件描述符调用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, "foon");
    fd = fileno(fp);
    fd2 = dup(fd);
    fclose(fp);
    ftruncate(fd2, 0);
    close(fd2);
    return 0;
}

相关内容

最新更新