調用lseek顯式的爲一個打開文件設置偏移量網絡
#include <unistd.h>ip
off_t lseek(int fd, off_t offset, int where);pip
返回值:成功,返回新的文件偏移量;出錯,返回-1文件
參數:pipe
offset:內核
相對where偏移的位置,能夠爲正數也能夠爲負數。當爲正數時,從where開始向後偏移offset個字節;當爲負數時,從where開始向前偏移offset絕對值個字節。參數
where:
SEEK_SET 將文件的偏移量設置爲距離文件開始處offset個字節
SEEK_CUR 將文件的偏移量設置爲當前值加offset個字節
SEEK_END 將文件的偏移量設置爲文件長度加offset個字節
注:
①lseek能夠檢測文件是否支持設置偏移量,若是文件描述符指向一個pipe、FIFO或網絡套接字,則返回-1,並將errno設置爲ESPIPE。
②文件偏移量能夠大於當前文件大長度,在這種狀況下,對該文件的下一次寫將加長該文件,並在文件中構成一個空洞。位於文件中沒有寫過的字節都被讀爲0.
③lseek僅將當前文件的偏移量記錄在內核中,它並不引發任何的I/O操做。而後,該偏移量用於下一個讀或寫操做(這也是爲何設置偏移量後要向文件中寫一些內容才能建立空洞文件的緣由)
例子: