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

时间:2015-11-22 21:42:07

标签: c fopen freopen

假设我有一个文件流。

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

我想以某种方式再次打开它,但我想要清空它,这次我无法访问文件名。我尝试执行以下操作,但似乎没有更改输出。

var results = (from i in query
    select new
    {
        NbrEquipements= (from e in RepoEquipement
                             where e.InstallationSpecialId == i.SpecialId
                             && (etatIds.Contains(e.EquEtat))
                             select e.SasId
                             ).Count()
    })
    .ToList();

它仍然在输出文件中显示“test”。

1 个答案:

答案 0 :(得分:0)

尝试以下方法。基本的想法是从流中获取文件描述符,但是你仍然需要关闭流,所以我复制文件描述符,干净地关闭流,然后在重复的文件描述符上调用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;
}