檔案lseek操作產生空洞檔案的方法

2021-09-23 22:54:20 字數 796 閱讀 5981

在檔案操作過程中,lseek操作可以偏移到檔案的任意位置。

在unix檔案操作中,檔案位移量可以大於檔案的當前長度,在這種情況下,對該檔案的下一次寫將延長該檔案,並在檔案中構成乙個空洞,這一點是允許的。位於檔案中但沒有寫過的位元組都被設為 0。

如果 offset 比檔案的當前長度更大,下乙個寫操作就會把檔案「撐大(extend)」。這就是所謂的在檔案裡創造「空洞(hole)」。沒有被實際寫入檔案的所有位元組由重複的 0 表示。空洞是否占用硬碟空間是由檔案系統(file system)決定的。

接下來我們來看乙個例子:

#include #include #include #include #include int main(void)

offset = lseek(fd, 1024ll * 1024ll * 1024ll, seek_end); //設定偏移的大小為1024ll*1024ll*1024ll,並偏移到檔案尾//部

printf("offset = %d\n", offset);

write(fd, "", 1); //寫空,寫1個位元組到檔案描述符裡

close(fd); //關閉檔案描述符

return 0;

}

執行結果:

檔案的大小為1gb:

C語言檔案操作lseek

相關函式 dup,open,fseek 標頭檔案 include include 定義函式 off t lseek int fildes,off t offset,int whence 引數 whence 為下列其中一種 seek set 引數offset 即為新的讀寫位置.seek cur 以目前...

空洞檔案1

ls l file 檢視檔案邏輯大小 du c file 檢視檔案實際占用的儲存塊多少 od c file 檢視檔案儲存的內容 空洞檔案是個啥玩意?就是有空洞的檔案,在日常的常識中,我們使用的檔案存放在硬碟分割槽上的時候,有多大的內容就會占用多大的空間,比如這個文字檔案裡面寫有1000個asc字元,...

linux 空洞檔案

我們都知道 lseek 系統呼叫可以改變檔案的偏移量,但如果程式呼叫使得檔案偏移量跨越了檔案結尾,然後再執行 i o 操作,將會發生什麼情況?read 呼叫會返回 0,表示檔案結尾。write 呼叫可以在檔案尾後的任意位置寫入資料。在這種情況下,對該檔案的下一次寫將延長該檔案,並在檔案中構成乙個空洞...