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