2012-03-01 100 views
0

我已經在我的Linux系統上使用我的C程序打開了一個輸出文件,並且我有posix_fallocate爲我預留了一個磁盤空間使用`posix_fallocate`創建的修剪文件

不止我需要,因爲我不知道我需要多少。天真地,我期望當我關閉文件時,它將被修剪到我實際需要的空間。但是,當然,生活並不容易。

那麼,如何我保留了一堆輸出空間,然後將其修剪到我實際使用的?

謝謝!

+2

「fallocate」背後的一般概念是,如果事先知道多大t他的文件將會是,你可以在它上面提示操作系統,這樣它可以給你沒有碎片的磁盤空間。如果你不知道,那麼你不應該聲稱你是這樣做的,而只是依次寫入文件。 – 2012-03-01 16:37:41

+0

你爲什麼使用'posix_fallocate'?這是非常有用的,可能不是你的情況! – 2012-03-01 18:50:42

+0

@SimonRichter,我有一個相當不錯的總體思路,儘管我可能會在數百到數千兆字節的數量級上以千字節爲單位。 – Richard 2012-03-01 22:07:54

回答

3

的行爲預期的一個 - 引述posix_fallocate手冊頁:關閉退房ftruncate

If the size of the file is less than offset+len, then the file is 
    increased to this size; otherwise the file size is left unchanged. 

要修復的文件大小:

The truncate() and ftruncate() functions cause the regular 
    file named by path or referenced by fd to be truncated to a 
    size of precisely length bytes. 
+0

我怎麼知道我已經輸入了多少數據?在我最終關閉它之前,它可能會通過許多複雜的路徑在那裏結束。 – Richard 2012-03-01 17:30:25

+3

@Richard,你可以調用'lseek(yourfd,0,SEEK_CUR)'來獲得文件中的當前偏移量。 – maxschlepzig 2012-03-01 18:12:19