C fopen fprintf仅在关闭文件后才写入文件

C fopen fprintf仅在关闭文件后才写入文件,c,fopen,fwrite,C,Fopen,Fwrite,如何在关闭文件之前启用对文件的写入, 我有这个代码要写到文件中,是这样做的,但只有在我关闭应用程序,它得到 分心器是简单记录器的一部分。 我需要的是查看写更新(带tail-f) IO可能已缓冲。写入后插入。,一个fflush(fp)将为您解决问题 但如果您想在任何地方解决此问题,则应使用setvbuf(3)函数将特定的文件指针置于行缓冲模式。C标准IO流支持无缓冲、行缓冲和块缓冲。默认情况下,所有文件都是块缓冲的;标准输出在发送到终端时被行缓冲,标准错误被取消缓冲。您可以更改这些默认值 添加se

如何在关闭文件之前启用对文件的写入, 我有这个代码要写到文件中,是这样做的,但只有在我关闭应用程序,它得到 分心器是简单记录器的一部分。 我需要的是查看写更新(带tail-f)


IO可能已缓冲。写入后插入。

,一个
fflush(fp)
将为您解决问题

但如果您想在任何地方解决此问题,则应使用
setvbuf(3)
函数将特定的
文件
指针置于行缓冲模式。C标准IO流支持无缓冲、行缓冲和块缓冲。默认情况下,所有文件都是块缓冲的;标准输出在发送到终端时被行缓冲,标准错误被取消缓冲。您可以更改这些默认值

添加
setlinebuf(fp)fp=fopen(…)进行错误检查后,立即向应用程序发送code>
和此
文件
流的所有输出都将被行缓冲

这当然会带来行缓冲而不是块缓冲的性能损失,但人们通常会在输出速度非常慢时抱怨这一点。(否则,堵塞物会很快填满并迅速冲洗。)

void init(char *pfileName)
    {
        if(pfileName != NULL)
        {
            fp = fopen(pfileName, "a+");
            if(fp != NULL)
                fseek(fp, 0, SEEK_END);
        }
    }

    void close()
    {
        if(fp != NULL)
            fclose(fp);
        fp = NULL;
    }

void write(char *pType, std::string pMsg, char *pFileName, int lineNo)
    {
        if(fp != NULL)
        {
            fprintf(fp,"%s %s %s %s %d %s\n", pType, __DATE__, __TIME__, pFileName, lineNo, pMsg.c_str());

        }
    }