ftruncate函数的功能及使用
ftruncate()
函數功能:改變文件大小
相關函數:open、truncate
表頭文件:#include <unistd.h>
函數原型:int ftruncate(int fd, off_t??length)
函數說明:ftruncate()會將參數fd指定的文件大小改為參數length指定的大小。參數fd為已打開的文件描述詞,而且必須是以寫入模式打開的文件。如果原來的文件件大小比參數length大,則超過的部分會被刪去
返 回??值:0、-1
錯誤原因:errno
??????????EBADF?????參數fd文件描述詞為無效的或該文件已關閉
??????????EINVAL??? 參數fd為一socket并非文件,或是該文件并非以寫入模式打開
以上引用自http://www.cnscn.org/showthread.php?t=659
?
使用方法:fd一般可以fileno(FILE *fp)獲取,標示文件當前的大小,lenggth則可由用戶定義。此函數一般用在文件初始化或者重新為文件分配空間時。
注意事項:此函數并未實質性的向磁盤寫入數據,只是分配了一定的空間供當前文件使用。當fd<length時,此時如果使用十六進制編輯工具打開該文件,你會發現文件末尾多了很多00,這就是執行這個函數后的效果。如果發生系統復位或者裝置掉電以后,該函數所產生的作用將被文件系統忽略,也就是說它所分配的空間將不能被識別,文件的大小將會是最后一次寫入操作的區域大小,而非ftruncate分配的空間大小,也就是說,文件大小有可能會被改變。
解決方法:可以在執行完ftruncate之后,在新空間的末尾寫入一個或以上字節的數據(不為Ox00),這樣新空間則不為空,文件系統會把這部分空間當成這個文件的私有空間處理,而不會出現文件大小改變的錯誤。
總結
以上是生活随笔為你收集整理的ftruncate函数的功能及使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RabbitMQ服务客户端的的业务逻辑
- 下一篇: TSIG