2011-12-24 76 views
3

如何啓用寫入文件befor關閉它, 我有此代碼寫入文件,是這樣,但只有在我關閉應用程序後,它得到 干擾它簡單的記錄器的一部分。 我需要的是看寫的更新(與尾-f)fopen fprintf dosnt寫入文件後才關閉它

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()); 

     } 
    } 

回答

5

Amadan is correctfflush(fp)會爲您解決問題。

但是,如果您想要解決此問題,則應使用setvbuf(3)函數將指定的FILE指針置於行緩衝模式。 C標準IO流支持無緩衝,行緩衝,塊緩衝。默認情況下,所有文件都是塊緩衝的;標準輸出在發送到終端時被線路緩衝,並且標準錯誤不被緩衝。您可以更改這些默認值。

添加setlinebuf(fp);到應用程序錯誤檢查的fp = fopen(...);和所有輸出連接到這個FILE流將被行緩衝之後。

這當然會帶來線緩衝而不是阻塞緩衝的性能損失,但是人們通常在輸出緩慢時抱怨這一點。 (否則這些區塊會很快填滿並被迅速刷新。)