我已經在我的Linux系統上使用我的C程序打開了一個輸出文件,並且我有posix_fallocate
爲我預留了一個磁盤空間。使用`posix_fallocate`創建的修剪文件
不止我需要,因爲我不知道我需要多少。天真地,我期望當我關閉文件時,它將被修剪到我實際需要的空間。但是,當然,生活並不容易。
那麼,如何做我保留了一堆輸出空間,然後將其修剪到我實際使用的?
謝謝!
我已經在我的Linux系統上使用我的C程序打開了一個輸出文件,並且我有posix_fallocate
爲我預留了一個磁盤空間。使用`posix_fallocate`創建的修剪文件
不止我需要,因爲我不知道我需要多少。天真地,我期望當我關閉文件時,它將被修剪到我實際需要的空間。但是,當然,生活並不容易。
那麼,如何做我保留了一堆輸出空間,然後將其修剪到我實際使用的?
謝謝!
的行爲預期的一個 - 引述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.
我怎麼知道我已經輸入了多少數據?在我最終關閉它之前,它可能會通過許多複雜的路徑在那裏結束。 – Richard 2012-03-01 17:30:25
@Richard,你可以調用'lseek(yourfd,0,SEEK_CUR)'來獲得文件中的當前偏移量。 – maxschlepzig 2012-03-01 18:12:19
「fallocate」背後的一般概念是,如果事先知道多大t他的文件將會是,你可以在它上面提示操作系統,這樣它可以給你沒有碎片的磁盤空間。如果你不知道,那麼你不應該聲稱你是這樣做的,而只是依次寫入文件。 – 2012-03-01 16:37:41
你爲什麼使用'posix_fallocate'?這是非常有用的,可能不是你的情況! – 2012-03-01 18:50:42
@SimonRichter,我有一個相當不錯的總體思路,儘管我可能會在數百到數千兆字節的數量級上以千字節爲單位。 – Richard 2012-03-01 22:07:54