lseek函数的用法(fseek()函数)
本文目录
- fseek()函数
- 怎样用lseek()函数将一个文件的内容附加到另一个文件上
- linux系统中用lseek()生成的空洞文件有什么用
- 为什么C语言中read函数和write函数间要用lseek来调整读取顺序
- 函数“lseek”的参数太少
- 如何通过使用lseek获取文件的长度
- lseek函数出现空洞的返回值是什么啊
fseek()函数
int fseek(FILE *stream, long offset, int fromwhere);fseek 用于二进制方式打开的文件,移动文件读写指针位置.fseek(in,-1L,1); -- 文件流in, 零点为当前指针位置,SEEK_CUR 就是 1, -1L -- 文件指针回退1个字节int fseek( FILE *stream, long offset, int origin );第一个参数stream为文件指针第二个参数offset为偏移量,整数表示正向偏移,负数表示负向偏移第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SETSEEK_SET: 文件开头SEEK_CUR: 当前位置 SEEK_END: 文件结尾 其中SEEK_SET,SEEK_CUR和SEEK_END和依次为0,1和2. 简言之: fseek(fp,100L,0);把fp指针移动到离文件开头100字节处; fseek(fp,100L,1);把fp指针移动到离文件当前位置100字节处; fseek(fp,100L,2);把fp指针退回到离文件结尾100字节处
怎样用lseek()函数将一个文件的内容附加到另一个文件上
int main(){ int iSrcFd = 0; int iDesFd = 0; CHAR acReadBuf = {0}; int iReadBytes = 0; int iWrtBytes = 0; /* open the source file*/ iSrcFd = open(“1.txt“,O_RDWR | O_SYNC); if (iSrcFd 《 0) { return -1; } iReadBytes = read(iSrcFd, acReadBuf, 128); /* open the des file */ iDesFd = open(“2.txt“,O_RDWR | O_SYNC); if (iSrcFd 《 0) { close(iSrcFd); return -1; } lseek(iDesFd, 0, SEEK_END); iWrtBytes = write(iDesFd, acReadBuf, 128); close(iDesFd); close(iSrcFd); return 0;} lseek(iDesFd, 0, SEEK_END);就是将当前文件读写的位置移动到文件末尾
linux系统中用lseek()生成的空洞文件有什么用
空洞文件很有用的,看看迅雷下载的文件,在未下载完成时就已经占据了全部文件大小的空间,这时候就是空洞文件。下载时如果没有空洞文件,多线程下载时文件就都只能从一个地方写入,这就不是多线程了。如果有了空洞文件,可以从不同的地址写入,就完成了多线程的优势任务。在开发过程中有时候需要为某个文件快速地分配固定大小的磁盘空间(1)可以让文件尽可能的占用连续的磁盘扇区,减少后续写入和读取文件时的磁盘寻道开销;(2)迅速占用磁盘空间,防止使用过程中所需空间不足。(3)后面再追加数据的话,不会需要改变文件大小,所以后面将不涉及metadata的修改。lseek()系统调用功能说明:通过指定相对于开始位置、当前位置或末尾位置的字节数来重定位 curp,这取决于 lseek() 函数中指定的位置函数原型:#include 《sys/types.h》 #include 《unistd.h》off_t lseek(int fd, off_t offset, int whence);参数说明:fd:文件描述符offset:偏移量,该值可正可负,负值为向前移whence:搜索的起始位置,有三个选项:(1).SEEK_SET: 当前位置为文件的开头,新位置为偏移量大小 (2).SEEK_CUR: 当前位置为文件指针位置,新位置为当前位置加上偏移量大小 (3).SEEK_END: 当前位置为文件结尾,新位置为偏移量大小返回值:文件新的偏移值
为什么C语言中read函数和write函数间要用lseek来调整读取顺序
-由于程序在打开文件时文件操作指针位于文件起始位置,即偏移量0-读取了1个字符的内容给变量c,文件指针偏移量为1-这时如果想将c值写到文件开始位置,则需要移动文件指针到文件开始-于是lseek就是移动文件当前指针的语句,它通知系统将文件指针移动到从文件开始位置(SEEK_SER)起的第0字节-这个程序比较奇怪,明明打开文件时选用了0_WRONLY参数,表明这个打开是只写的,但上来就读
函数“lseek”的参数太少
Linux的lseek函数用来控制一个打开的文件的读写位置,它的函数原型如下:off_t lseek(int fildes,off_t offset ,int whence);参数的用法:fildes参数为一个已打开的文件描述符;参数offset为读写位置的位移数,这个位移数是根据参数whence来确定的;whence参数分为下列三种:SEEK_SET:表示offset用来直接设置读写位置。SEEK_CUR:表示以目前的读写位置往后增加offset个位移量。SEEK_END:表示将读写位置指向文件尾后再增加offset个位移量。当whence值为SEEK_CUR或SEEK_END时,参数offet允许负值出现。当lseek调用成功时返回目前的读写位置,也就是距离文件开头多少个字节。若有错误则返回-1,errno会存放错误代码。下面是几个使用示例:将读写位置移到文件开头:lseek(myfile, 0, SEEK_SET);将读写位置移到文件尾:lseek(myfile, 0, SEEK_END);想要取得目前文件位置:off_t cur=lseek(myfile, 0, SEEK_CUR);注意:使用lseek函数需要包含以下头文件:#include 《sys/types.h》#include 《unistd.h》
如何通过使用lseek获取文件的长度
获取文件长度先把文件指针移动到文件结尾,然后得出文件指针相对于文件头的偏移量,这个偏移量就是以字节计算的文件长度:unsigned long int len; //用len存储文件长度fseek(pf,0,SEEK_END); //移动到文件尾 ,假设文件指针变量为pflen=ftell(pf); //ftell函数返回当前文件指针相对于文件头的偏移量,文件指针位于文件尾的话,那返回值就相当于文件长度了
lseek函数出现空洞的返回值是什么啊
函数名: lseek 功 能: 移动文件读/写指针 用 法: long lseek(int handle, long offset, int fromwhere); 所有打开的文件都有一个当前文件偏移量(current file offset),以下简称为 cfo。cfo 通常是一个非负整数,用于表明文件开始处到文件当前位置的字节数。读写操作通常开始于 cfo,并且使 cfo 增大,增量为读写的字节数。文件被打开时,cfo 会被初始化为 0,除非使用了 O_APPEND 。 使用 lseek 函数可以改变文件的 cfo 。 lseek 的以下用法返回当前的偏移量: off_t currpos; currpos = lseek(fd, 0, SEEK_CUR); 这个技巧也可用于判断我们是否可以改变某个文件的偏移量。如果参数 fd(文件描述符)指定的是 pipe(管道)、FIFO 或者 socket,lseek 返回 -1 并且置 errno 为 ESPIPE。 对于普通文件(regular file),cfo 是一个非负整数。但对于特殊设备,cfo 有可能是负数。因此,我们不能简单地测试 lseek 的返回值是否小于 0 来判断 lseek 成功与否,而应该测试 lseek 的返回值是否等于 -1 来判断 lseek 成功与否。 lseek 仅将 cfo 保存于内核中,不会导致任何 I/O 操作。这个 cfo 将被用于之后的读写操作。 如果 offset 比文件的当前长度更大,下一个写操作就会把文件“撑大(extend)”。这就是所谓的在文件里创造“空洞(hole)”。没有被实际写入文件的所有字节由重复的 0 表示。空洞是否占用硬盘空间是由文件系统(file system)决定的。本段程序例 #include 《stdio.h》 #include 《stdlib.h》 #include 《string.h》 #include 《unistd.h》 #include 《sys/types.h》 #include 《fcntl.h》 int main(void) { int handle; char msg = “This is a test“; char ch; /* create a file */ handle = open(“TEST.$$$“, O_CREAT | O_RDWR, S_IREAD | S_IWRITE); /* write some data to the file */ write(handle, msg, strlen(msg)); /* seek to the begining of the file */ lseek(handle, 0L, SEEK_SET); /* reads chars from the file until we hit EOF */ do { read(handle, &ch, 1); printf(“%c“, ch); } while (!eof(handle)); close(handle); return 0; }
更多文章:

illegal是什么意思中文(illegally是什么意思)
2025年2月12日 19:50

二进制计算器在线计算(二进制计算01011001^10100111怎么计算请告诉我使用WINDOWS附带的计算器的计算方法)
2025年4月2日 19:50

suggestions翻译(suggestionanswerbulter的drama和翻译)
2025年2月26日 07:20

retaliatory(retaliatory tariff是什么意思)
2025年2月20日 22:30

拍摄夜景时,该如何设置相机?vscode需要怎么设置,才可以在编辑器内部调试java
2025年3月4日 21:50

the rest of(The rest 和the rest of 的区别)
2025年3月19日 06:40

php随机数插入数据库(PHP 怎么循环一组数字(1万条数据)插入数据库)
2025年3月16日 17:20

vba编程从入门到精通电子书(VBA编程从入门到精通的作品鉴赏)
2025年3月22日 02:30

msde数据库(安装速达3000std单机版安装msde数据库时安装到一半时出现“指定的实例名无效”的提示,怎么办)
2025年3月20日 10:30

substrb函数(Oracle函数Substrb和Convert函数问题)
2025年2月26日 17:00

miff,0n,72种不同插法?melody与miffy 有关系吗
2025年3月4日 01:00

js教程removechild(怎样用JS实现关闭当前窗口)
2025年3月10日 07:20