Re: [問題] 如何強迫 printf 寫回資料

看板Programming作者 (ha(ruhi|yate)ism)時間18年前 (2007/03/02 13:06), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串2/3 (看更多)
※ 引述《N2I (NII)》之銘言: : 一個簡單的測試程式,我將 stdout 轉向到檔案 log,程式執行後,會停在 : loop 裡,按下 ctrl+z 或 ctrl+c 強迫程式結束。 : 檢查 log 檔, ls 的結果都正確寫入,可是字串HELLO卻沒有正確寫入,我已經呼叫 : fsync() 強迫將 buffer 資料寫回了,為甚麼還是沒有? : 是不是有甚麼地方我沒有注意到呢,謝謝囉 一個很奇怪的猜測: 雖然你底層已經把標準輸出轉走了 但表層上 stdout這個FILE *變數指向的結構裡記載的底層編號沒有改 而printf是寫進stdout這變數裡指定的地方 因此HELLO字串是寫到這已經不在的編號裡去了 而system會去找底層到底標準輸出現在在哪裡 把東西灌過去 我目前只想到freopen一解 (即開檔時改用freopen("log","w",stdout);來開) 這樣library會把stdout指向的結構更新 printf應該就能正常動作了 -- [LPH] Oops, your OOP's a problem? 說: 你現在還是看不到狗? ************* 說: 看得到 只是 他們不會跑 就一直呆呆在那邊 一直在起點 [LPH] Oops, your OOP's a problem? 說: 你要按"ㄅㄧㄤˋ"它們才會跑啊@@" -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 192.192.197.115

03/02 14:55, , 1F
run a strace to find out the problem?
03/02 14:55, 1F
文章代碼(AID): #15vx3l_s (Programming)
文章代碼(AID): #15vx3l_s (Programming)