[問題] linux上跑程式檔案輸出和程式進度不同步的問題

看板LinuxDev作者 (阿光)時間16年前 (2009/05/14 20:52), 編輯推噓0(004)
留言4則, 3人參與, 最新討論串1/1
各位前輩好 小弟在linux based的計算主機上執行一些科學運算程式, 有一個問題困擾了我很久,一直無法解決, 所以想向大家求救, 我是用fortran來寫作程式的, 由於程式執行時間很長,為了保險起見, 程式中有加入輸出"紀錄檔"的程式碼, (紀錄檔指的就是如果程式不幸中斷,可以從這紀錄檔接續開始) 程式如果在windows環境下, 紀錄檔會隨著程式的進行正常地輸出正常地更新, (像是跑完了第1000次疊代,紀錄檔的資訊也更新到第1000次的狀態) 但是如果相同的程式是放在linux based的計算主機上, 紀錄檔並沒有正常發揮作用, 可能程式都跑完了第1000次疊代,紀錄檔卻只有更新到第700次的狀態, 甚至都沒有輸出,要等到程式結束後才會輸出, 這樣一點紀錄的作用都沒有。 請問是linux的環境設定問題呢,還是我程式必須針對不同平台做修正呢, 又還是我在編譯時要下特殊的參數呢? 請有在linux平台上執行過程式的前輩指點一下小弟我吧。 謝謝 註 軟體環境及硬體環境 1.Q6600+技嘉965主機板 opensue11+PGI fortran complier 2.Q6600+技嘉965主機板 windows vista+PGI fortran complier 3.XEON E5410+不知名主機版 SUSE Linux 9+PGI fortran complier 4.AMD64 Opteron Dual Core 2.8 SUSE Linux 9.3+PGI fortran complier 紀錄檔案並不大,不超過1MB, 只有在2的情況下,才會正常地輸出。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.155.8

05/14 22:22, , 1F
fortran不熟,C的話加個fflush()吧
05/14 22:22, 1F

05/15 17:25, , 2F
感謝回答,再問一下假設紀錄檔是unit=113,是不是在
05/15 17:25, 2F

05/15 17:26, , 3F
要強制他寫入硬碟時加上call flush(113)這樣?
05/15 17:26, 3F

05/15 18:49, , 4F
試試 chattr +S your_log_filename
05/15 18:49, 4F
文章代碼(AID): #1A31GETv (LinuxDev)
文章代碼(AID): #1A31GETv (LinuxDev)