本篇內(nèi)容主要講解“Linux下的lseek()函數(shù)有什么用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Linux下的lseek()函數(shù)有什么用”吧!
目前創(chuàng)新互聯(lián)已為1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站運(yùn)營、企業(yè)網(wǎng)站設(shè)計(jì)、泰來網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。每個(gè)打開的文件都有一個(gè)與其相關(guān)連的“當(dāng)前文件偏移量”( current file offset )。它通常是一個(gè)非負(fù)整數(shù),用以度量從文件開始處計(jì)算的字節(jié)數(shù)。通常,讀、寫操作都從當(dāng)前文件偏移量開始,并使偏移量增加所讀寫的字節(jié)數(shù)。按系統(tǒng)默認(rèn)情況,當(dāng)打開一個(gè)文件時(shí),除非指定 O_APPEND 選項(xiàng),否則該偏移量設(shè)置為 0。
lseek調(diào)用僅將當(dāng)前的文件偏移量記錄在內(nèi)核中,它并不引起任何的 I/O 操作。然后,該偏移量用于下一個(gè)讀或?qū)懖僮鳌?/p>
函數(shù)原型
#include
off_t lseek(int fildes,off_t offset ,int whence);
參數(shù)fildes 為已打開的文件描述詞,參數(shù)offset 為根據(jù)參數(shù)whence來移動(dòng)讀寫位置的位移數(shù)。
whence為下列其中一種:(SEEK_SET,SEEK_CUR和SEEK_END和依次為0,1和2).
SEEK_SET 將讀寫位置指向文件頭后再增加offset個(gè)位移量。
SEEK_CUR 以目前的讀寫位置往后增加offset個(gè)位移量。
SEEK_END 將讀寫位置指向文件尾后再增加offset個(gè)位移量。
當(dāng)whence 值為SEEK_CUR 或SEEK_END時(shí),參數(shù)offet允許負(fù)值的出現(xiàn)。
下列是較特別的使用方式:
1) 欲將讀寫位置移到文件開頭時(shí):
lseek(int fildes,0,SEEK_SET);
2) 欲將讀寫位置移到文件尾時(shí):
lseek(int fildes,0,SEEK_END);
3) 想要取得目前文件位置時(shí):
lseek(int fildes,0,SEEK_CUR);
返回值
當(dāng)調(diào)用成功時(shí)則返回目前的讀寫位置,也就是距離文件開頭多少個(gè)字節(jié)。若有錯(cuò)誤則返回-1,errno 會(huì)存放錯(cuò)誤代碼。
可能設(shè)置erron的錯(cuò)誤代碼:
EBADF: fildes不是一個(gè)打開的文件描述符。
ESPIPE:文件描述符被分配到一個(gè)管道、套接字或FIFO。
EINVAL:whence取值不當(dāng)。
注:Linux系統(tǒng)不允許lseek()對tty裝置作用,此項(xiàng)動(dòng)作會(huì)令lseek()返回ESPIPE。
到此,相信大家對“Linux下的lseek()函數(shù)有什么用”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)建站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!