亚洲精品一二区_国产黄色片网站_99久久久成人国产精品_蜜臀网_国产精品一区二区三区免费_成人av中文字幕_91精品国产欧美一区二区成人

當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > lseek()函數(shù)的原型及使用方法,超詳細(xì)

lseek()函數(shù)的原型及使用方法,超詳細(xì) 時(shí)間:2018-07-19      來(lái)源:未知

對(duì)于所有打開(kāi)的文件都有一個(gè)當(dāng)前文件偏移量(current file offset),文件偏移量通常是一個(gè)非負(fù)整數(shù),用于表明文件開(kāi)始處到文件當(dāng)前位置的字節(jié)數(shù)。讀寫(xiě)操作通常開(kāi)始于當(dāng)前文件偏移量的位置,并且使其增大,增量為讀寫(xiě)的字節(jié)數(shù)。文件被打開(kāi)時(shí),文件的偏移量會(huì)被初始化為 0,除非使用了O_APPEND 。

讀寫(xiě)操作可以使文件的偏移量發(fā)生變化;而lseek 函數(shù)也可以改變文件的當(dāng)前位置。下面我們一塊來(lái)看一下關(guān)于lseek函數(shù)的原型及使用方法。

通過(guò)man手冊(cè)查看到lseek函數(shù)原型如下:需要的頭文件為

#include

#include

off_t lseek(int fd, off_t offset, int whence);

參數(shù):fd:文件描述符

offset:文件偏移量

whence:文件偏移相對(duì)位置

返回值:成功:返回文件新的偏移量(成功)

失敗:-1(失敗)

參數(shù) offset可正可負(fù),負(fù)數(shù)時(shí)向文件開(kāi)頭偏移,正數(shù)相對(duì)于文件末尾偏移

參數(shù) offset 的含義取決于參數(shù) whence:

1. 如果 whence 是 SEEK_SET,offset相對(duì)于文件開(kāi)頭進(jìn)行偏移

2. 如果 whence 是 SEEK_CUR,offset相對(duì)文件當(dāng)前位置進(jìn)行偏移

3. 如果 whence 是 SEEK_END,offset相對(duì)于文件末尾進(jìn)行偏移

對(duì)于whence參數(shù)的選項(xiàng)SEEK_SET、SEEK_CUR 和 SEEK_END 是 System V 引入的,在這之前使用的是 0、1 和 2。

lseek 的以下用法返回當(dāng)前的偏移量:

off_t currpos;

currpos = lseek(fd, 0, SEEK_CUR);

這個(gè)技巧也可用于判斷我們是否可以改變某個(gè)文件的偏移量。如果參數(shù) fd(文件描述符)指定的是 pipe(管道)、FIFO 或者 socket,lseek 返回 -1 并且置 errno 為ESPIPE。

對(duì)于普通文件(regular file),文件偏移量是一個(gè)非負(fù)整數(shù)。但對(duì)于特殊設(shè)備,文件偏移量有可能是負(fù)數(shù)。因此,我們不能簡(jiǎn)單地測(cè)試 lseek 的返回值是否小于 0 來(lái)判斷 lseek 成功與否,而應(yīng)該測(cè)試 lseek 的返回值是否等于 -1 來(lái)判斷 lseek 成功與否。

lseek 僅將文件偏移位置保存于內(nèi)核中,不會(huì)導(dǎo)致任何 I/O 操作。

如果 offset 比文件的當(dāng)前長(zhǎng)度更大,下一個(gè)寫(xiě)操作就會(huì)把文件“撐大(extend)”。這就是所謂的在文件里創(chuàng)造“空洞(hole)”。沒(méi)有被實(shí)際寫(xiě)入文件的所有字節(jié)由重復(fù)的 0 表示。空洞是否占用硬盤(pán)空間是由文件系統(tǒng)(file system)決定的。

以下程序創(chuàng)建一個(gè)有空洞的文件:

#include

#include

#include

#include

char buf1[] = "abcdefghij";

char buf2[] = "ABCDEFGHIJ";

int main(void)

{

int fd, size;

if ((fd = open("file.hole", O_RDONLY|O_CREATO_TRUNC, 0666)) < 0)

{

printf("open error\n");

return -1;

}

size = sizeof (buf1) - 1;

if (write(fd, buf1, size) != size)

{

printf("buf1 write error\n");

return -1;

}

/* offset now = 10 */

if (lseek(fd, 16384, SEEK_SET) == -1)

{

printf("lseek error\n");

return -1;

}

/* offset now = 16384 */

size = sizeof buf2 - 1;

if (write(fd, buf2, size) != size)

{

printf("buf2 write error\n");

return -1;

}

/* offset now = 16394 */

return 0;

}

上一篇:udp編程步驟詳解,就是如此的簡(jiǎn)單

下一篇:nm命令使用詳解,讓你加快學(xué)習(xí)速度

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見(jiàn)科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5京公海網(wǎng)安備11010802025203號(hào)

回到頂部

主站蜘蛛池模板: 日韩黄色免费观看 | 久草中文字 | 亚洲天堂成人在线观看 | 亚洲永久视频 | 日本特黄在线观看免费 | 亚洲第一视频 | 欧美日韩国 | 香港三日本三级三级三级 | 日本aⅴ日本高清视频影片www | 成在线人永久免费播放视频 | 免费不卡中文字幕在线 | 久久久国产亚洲精品 | 欧区一欧区二欧区三免费 | 欧美第一网站 | www.九色视频 | 色综合天天色综合 | 成在线人免费视频一区二区三区 | www.亚洲精品| 亚洲免费大片 | 成人午夜影院 | 99re热这里只有精品视频 | 国产成年女一区二区三区 | 日本三级香港三级妇三 | 在线日本看片免费人成视久网 | 久久久久亚洲视频 | 中文字幕亚洲专区 | 日本黄色小视频 | 亚洲国产系列久久精品99人人 | 4444在线观看| 日日干夜夜艹 | 欧美激烈大尺度叫床的床戏 | 免费国产99久久久香蕉 | 在线a亚洲视频播放在线观看 | 欧美经典人人爽人人爽人人片 | 亚洲视频免费在线观看 | 欧美精品免费一区欧美久久优播 | 国产免费又爽又黄又刺激的视频 | 欧洲亚洲一区 | 欧美性f| 久久久小视频 | 亚洲一二区视频 |