簡體   English   中英

fopen fprintf dosnt只有在關閉后才能寫入文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM