![](/img/trans.png)
[英]Is it possible to write fopen(), fscanf() or fprintf() functions using only C?
[英]fopen fprintf dosnt write to file only after closing it
如何啟用寫入文件befor關閉它,我有這個代碼寫入文件,是這樣做,但只有在我關閉應用程序后,它得到干擾器它的簡單記錄器的一部分。 我需要的是看到寫更新(使用tail -f)
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());
}
}
IO可能是緩沖的。 寫完后插入fflush(fp)
。
Amadan是正確的 , fflush(fp)
會為你解決問題。
但是如果你想在任何地方解決這個問題,你應該使用setvbuf(3)
函數將特定的FILE
指針置於行緩沖模式。 C標准IO流不支持緩沖 , 行緩沖 , 塊緩沖 。 默認情況下,所有文件都是塊緩沖的; 標准輸出在發送到終端時是行緩沖的,標准錯誤是無緩沖的。 您可以更改這些默認值。
添加setlinebuf(fp);
在錯誤檢查fp = fopen(...);
后立即到您的應用程序fp = fopen(...);
並且您對此FILE
流的所有輸出都將進行行緩沖。
這當然確實帶來了行緩沖而不是塊緩沖的性能損失,但人們通常會抱怨它,無論如何它們的輸出都很慢。 (否則塊會快速填滿並快速刷新。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.