2016-11-04 83 views
0

如果您可以保證搜索後有數據要寫入,使用fseek可以安全地在文件開頭保留字節?例如:fseek保留空間安全嗎?

// reserve space 
fseek(f, 4096, SEEK_SET); 

// ... 

// write some data after the reserved space 
fwrite(buf, 1, bufsize, f); 

// go back to the reserved space (to update it) 
rewind(f); 

// ... 

我注意到它在Windows上工作,但其他平臺呢?有沒有什麼值得注意的地方?

+0

它在Unix上不保留空間。在寫入並刷新輸出之前,文件中沒有任何實際發生。 – Barmar

回答

1

是的,這工作正常。只要您以ww+模式打開文件,而不是aa+,您可以查找文件中的任意位置並在其中寫入,然後在該位置寫入該文件。該文件的其他部分將保持不變;如果它們從未寫入,則它們將包含零字節。

所以,如果你對剛在w模式打開(這首先截斷文件)的文件如下:

fseek(f, 10, SEEK_SET); 
fwrite("abc", 1, 3, f); 
rewind(f); 
fwrite("1234567890", 1, 10, f); 

該文件的內容將是:

1234567890abc 
+0

哦,當然,關於磁盤容量的好點。我想我會在未來將'fwrite'作爲標準。 – user966939

+0

我假設檢查磁盤容量是全部原因。 「預留」空間意味着什麼? – Barmar

+0

我正在爲需要稍後更新的文件格式標題保留空間。 – user966939