[問題] fwrite的問題..

看板C_and_CPP (C/C++)作者 (說好的性福呢?)時間16年前 (2009/10/28 22:03), 編輯推噓5(501)
留言6則, 5人參與, 最新討論串1/1
今天寫檔發現一個問題... 譬如我要對一檔案重複寫兩次, 第一次寫了 120 Byte 在第二次開始前我先使用 rewind讓pointer回到檔頭, 然後 在在寫100Byte... 那現在我再用 fclose將檔案關閉,, 請問這個檔案會多出後面的20Byte嗎? 有甚麼方法能夠在寫第二次前先將檔案的size歸零再繼續寫嗎? 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.127.201.105

10/28 22:47, , 1F
ftruncate ?
10/28 22:47, 1F
ftruncate我試過, 可是他第一個參數是要 int fd, 我使用fopne產生的事一個 FILE *, 這樣子應該是不能使用此API吧?

10/28 22:48, , 2F
"w+" ?
10/28 22:48, 2F

10/28 22:51, , 3F
看一下fopen() 的mode 那邊的設定
10/28 22:51, 3F
請問意思是說寫第二次時, 在使用 fopen("", "w"); 一次嗎? 因為這是在Embedded上跑的, cpu只有300Mhz因此會擔心效能問題 所以想問有沒有更好的方法, 謝謝! ※ 編輯: pilipalabon 來自: 59.127.201.105 (10/28 23:15) ※ 編輯: pilipalabon 來自: 59.127.201.105 (10/28 23:17)

10/28 23:35, , 4F
效能差多少? 先對最後再optimization
10/28 23:35, 4F

10/29 08:09, , 5F
aw+
10/29 08:09, 5F

10/29 08:12, , 6F
參考 fileno 和 ftruncate
10/29 08:12, 6F
請問ftruncate的用法可以 ftruncate(fd, 0) 把檔案先恢復到跟一開始fopen一樣,然後再使用 fwrite寫檔, 這樣子可以嗎? 因為看man好像是說 ftruncate 所指定的size後都會被當垃圾, 所以會造成之後 fwrite所寫的資料都是無效的嗎? 另外上面有建議說在使用fopen一次,請問可以不fclose就 fopen嗎? 謝謝 ※ 編輯: pilipalabon 來自: 59.127.197.35 (10/29 09:15) ※ 編輯: pilipalabon 來自: 59.127.197.35 (10/29 09:23)
文章代碼(AID): #1Aw4z5O_ (C_and_CPP)
文章代碼(AID): #1Aw4z5O_ (C_and_CPP)