
檔案 I/O
|
51
也可以把
fd
的檔案位置設定到檔案的末端:
off_t ret;
ret = lseek (fd, 0, SEEK_END);
if (ret == (off_t)
−
1)
/* 錯誤 */
因為
lseek()
會傳回更動後的檔案位置,所以可經由把
pos
設為零的方式,用它來找到
當前的檔案位置:
int pos;
pos = lseek (fd, 0, SEEK_CUR);
if (pos == (off_t)
−
1)
/* 錯誤 */
else
/* 'pos' 是 fd 的當前位置 */
到目前為止,
lseek()
最常見的用法就是找到檔案的開頭、找到檔案的末端,或是決定
一個檔案描述器的當前檔案位置。
找尋檔案末端之後的位置
你可以要求
lseek()
把檔案指標推進到檔案末端之後的位置。例如,下面的程式碼會把
指標從(
fd
所映射之)檔案的末端推進 1688 個位元組:
int ret;
ret = lseek (fd, (off_t) 1688, SEEK_END);
if (ret == (off_t)
−
1)
/* 錯誤 */
就其本身而言,將檔案指標推進到檔案末端之後的位置,事實上什麼也沒做—對剛建立
的檔案位置進行讀取操作將傳回 EOF。然而,如果隨後對此位置進行寫入操作,則檔案
的舊長度與新長度之間將會建立新的空間,而且會以零來填補它。
這個用零填補的空間稱為
空洞
(
hole
)。 在 Unix 風格的檔案系統中,空洞並不佔任何實
體的磁碟空間。這意味著,檔案系統上所有檔案的大小加總起來可能會超過磁碟的實體 ...