lseek():移动文件读写位置

头文件:

#include <sys/types.h>
#include <unistd.h>

定义函数:

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

函数说明:

每一个已打开的文件都有一个读写位置, 当打开文件时通常其读写位置是指向文件开头, 若是以附加的方式打开文件(如O_APPEND), 则读写位置会指向文件尾. 当read()或write()时, 读写位置会随之增加,lseek()便是用来控制该文件的读写位置. 参数fildes 为已打开的文件描述词, 参数offset 为根据参数whence来移动读写位置的位移数.

参数 whence 为下列其中一种:

    SEEK_SET 参数offset 即为新的读写位置.SEEK_CUR 以目前的读写位置往后增加offset 个位移量.SEEK_END 将读写位置指向文件尾后再增加offset 个位移量. 当whence 值为SEEK_CUR 或SEEK_END 时, 参数offet 允许负值的出现.

下列是教特别的使用方式:

  1. 欲将读写位置移到文件开头时:lseek(int fildes, 0, SEEK_SET);
  2. 欲将读写位置移到文件尾时:lseek(int fildes, 0, SEEK_END);
  3. 想要取得目前文件位置时:lseek(int fildes, 0, SEEK_CUR);

返回值:当调用成功时则返回目前的读写位置, 也就是距离文件开头多少个字节. 若有错误则返回-1, errno 会存放错误代码.

附加说明:Linux 系统不允许lseek()对tty 装置作用, 此项动作会令lseek()返回ESPIPE.

fseek()函数: 移动文件流的读写位置

头文件:

#include <stdio.h>

定义函数:

int fseek(FILE * stream, long offset, int whence);

函数说明:
fseek()用来移动文件流的读写位置.

1、参数stream 为已打开的文件指针,
2、参数offset 为根据参数whence 来移动读写位置的位移数。参数 whence 为下列其中一种:
SEEK_SET 从距文件开头offset 位移量为新的读写位置. SEEK_CUR 以目前的读写位置往后增加offset 个位移量.
SEEK_END 将读写位置指向文件尾后再增加offset 个位移量. 当whence 值为SEEK_CUR 或
SEEK_END 时, 参数offset 允许负值的出现.

下列是较特别的使用方式:

  1. 欲将读写位置移动到文件开头时:fseek(FILE *stream, 0, SEEK_SET);
  2. 欲将读写位置移动到文件尾时:fseek(FILE *stream, 0, 0SEEK_END);

返回值:当调用成功时则返回0, 若有错误则返回-1, errno 会存放错误代码.

附加说明:fseek()不像lseek()会返回读写位置, 因此必须使用ftell()来取得目前读写的位置.

#include <stdio.h>
main()
{FILE * stream;long offset;fpos_t pos;stream = fopen("/etc/passwd", "r");fseek(stream, 5, SEEK_SET);printf("offset = %d\n", ftell(stream));rewind(stream);fgetpos(stream, &pos);printf("offset = %d\n", pos);pos = 10;fsetpos(stream, &pos);printf("offset = %d\n", ftell(stream));fclose(stream);
}

执行:

offset = 5
offset = 0
offset = 10

rewind函数

文件指针FILE *fp中,包含一个读写位置指针char * _nextc, 它指向下一次文件读写的位置。

  typedef struct{int _fd;    /* 文件号 */int _cleft;   /* 缓冲区中剩下的字节数 */int _mode;   /* 文件操作模式 */char * _nextc; /* 下一个字节的位置 */char * _buff; /*文件缓冲区位置 */}FILE;

每当进行一次读写后,该指针自动指向下一次读写的位置。
当文件刚打开或创建时,该指针指向文件的开始位置。
可以用函数 ftell()获取当前的位置指针,也可以用rewind()/ fseek()函数改变位置指针,使其指向需要读写的位置。

rewind()函数
原型:void rewind(FILE *fp)
作用:使文件fp的位置指针指向文件开始。

[例12.4] 把一个文件的内容显示在屏幕上,并同时复制到另一个文件。#include "stdio.h"void main()
{
FILE *fp1, *fp2;
fp1 = fopen("file1.c", "r"); /* 源文件 */fp2 = fopen("file2.c", "w"); /* 复制到file2.c */while(!feof(fp1)) putchar(fgetc(fp1)); /* 显示到屏幕上 */rewind(fp1); /* fp回到开始位置 */while(!feof(fp1)) fputc(fgetc(fp1), fp2);fclose(fp1);fclose(fp2);
} 

C语言lseek()函数和 fseek()函数 rewind函数相关推荐

  1. scanf函数解析,附带rewind函数(清空缓存)

    scanf函数:int scanf(const char * __restrict, -) __scanflike(1, 2); 参考资料:小话c语言(3)--scanf函数,想说输入不容易! // ...

  2. c语言rewind函数作用,C 文件 rewind() 函数

    C 文件 rewind() 函数 rewind()函数将文件指针设置在流的开头.如果必须多次使用流,这很有用. 语法: void rewind(FILE *stream) 文件:file.txtthi ...

  3. c语言中rewind函数_C语言中的rewind()函数与示例

    c语言中rewind函数 C中的rewind()函数 (rewind() function in C) The rewind() function is defined in the <stdi ...

  4. C语言rewind函数返回值为空,C语言rewind和fseek函数的用法详解(随机读写文件)...

    前面介绍的文件读写函数都是顺序读写,即读写文件只能从头开始,依次读写各个数据.但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写.这种读写方式称为随机读 ...

  5. C语言fseek、ftell和rewind函数详解

    对于文件的读写方式,C 语言不仅支持简单地顺序读写方式,还支持随机读写(即只要求读写文件中某一指定的部分).对顺序读写方式来说,随机读写方式需要将文件内部的位置指针移动到需要读写的位置再进行读写,这通 ...

  6. C语言文件指针定位函数fseek与rewind有何区别?

    在glibc中rewind和fseek本质上都是调用了函数_IO_seekoff_unlocked,所以两者是同根同源的,在不考虑返回值的情况下调用哪个都可以,用rewind写起来简单些,用fseek ...

  7. f_lseek_C语言中lseek()函数和fseek()函数的使用详解

    C语言lseek()函数:移动文件的读写位置 头文件: #include #include 定义函数: off_t lseek(int fildes, off_t offset, int whence ...

  8. fseek/ftell/rewind/fgetpos/fsetpos函数使用-linux

    程序: #include<stdio.h> int main(int argc,char *argv[]) { FILE * stream; fpos_t pos; stream = fo ...

  9. C++文件读写函数之——fopen、fread和fwrite、fgetc和fputc、fgets和fputs、ftellf和fseek、rewind...

    由于最近经常使用到c语言中的读写文件,所以在此总结以下,方便以后查找. 在c中,文件操作都是由库函数来实现的,主要是分为读和写两种操作,以下详细讲解以下所有有关文件操作的邯郸乎的用法: //C++写入 ...

最新文章

  1. shell脚本api接口考虑并发问题的可行性操作
  2. [YTU]_2428(C语言习题 计算该日在本年中是第几天)
  3. 提升方法之AdaBoost算法
  4. WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(11)-BINFS在Nand上的实现(Multi-Bin的实现)
  5. NUXT内存泄漏引发问题
  6. 基于Spring Cloud微服务化开发平台-Cloud Platform后台管理系统 v3.1.0
  7. HDU-时间挑战 树状数组
  8. ipfs+eth部分资料
  9. Bash:把粘贴板上的内容拷贝的文件中。
  10. 【Cocos Creator】 编辑器自定义 ——下拉列表属性、滑动条属性等
  11. Google Play 开发者账户被封
  12. css获取屏幕分辨率
  13. 流氓软件广告屏蔽大师 处理方式
  14. 子集生成的两种方法 (增量构造法 和 位向量法)
  15. 计算机新建怎么没有表格,为何我的电脑新建项目里没有EXCEL表格呢,
  16. css 对checkbox样式进行修改
  17. c语言tft屏浮点数显示,编个可显示中文的TFT程序
  18. xshell4连接ubuntu,报错No matching outgoing encryption
  19. JavaScript检查数组中是否有重复值
  20. go语言中赋值出错:no new variables on left side of :=

热门文章

  1. Educational Codeforces Round 61 (Rated for Div. 2)(A、B、C、D、E、F)
  2. 从源码角度上探索AdapterViewFlipper怎么实现广告栏的垂直自动滚动
  3. How I Hacked Facebook with a Word Document
  4. 关于log4j的参数含义
  5. 凌云驭势 亚马逊云科技开启re:Invent中国行
  6. 吃萝卜去口气(口臭)[转]
  7. KVM - qcow2 和 raw 格式对比
  8. python制作网页难吗_怎么做网页制作(用python做网页与html)
  9. 使用Google学术自动生成标准的参考文献格式(Word版+LaTex版)
  10. 红黑树(算法导论版)