unix环境编程 第五章 5.10 定位流

定位标准I/O流的三种方法:

  • ftell和fseek函数,假定文件的文件的位置可以存放一个长整型中。
  • ftello和fseeko函数,使用文件偏移量off_t数据类型代替了长整型
  • fgetpos和fsetpos函数,使用抽象数据类型fpos_t记录文件的位置,用以记录文件位置
#include <stdio.h>
long ftell(FILE *stream);
//stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。该函数返回位置标识符的当前值。如果发生错误,则返回 -1L,全局变量 errno 被设置为一个正值
off_t ftello(FILE *fp);//除了返回类型不同以外,ftello和tello相同
int fseek(FILE * stream, long offset, int whence);
//参数stream 为已打开的文件指针,参数offset 为根据参数whence 来移动读写位置的位移数。当调用成功时则返回0, 若有错误则返回-1, errno 会存放错误代码.
int fseeko(FILE *fp,off_t offset,int whence);除了返回类型不同以外,fseeko和fseek相同
void rewind(FILE * stream);
//stream为以打开文件的指针。该函数将一个流设置到文件的起始位置
int fgetpos(FILE *stream, fpos_t *pos);
//fp为当前文件流的指针,pos为指向fpos_t类型的指针。如果成功,该函数返回零。如果发生错误,则返回非零值。
int fsetpos(FILE *fp, fpos_t  *pos);
//fp为当前文件流指针,pos为fpos_t类型的文件读或写指针的位置。如果成功,该函数返回零值,否则返回非零值,并设置全局变量 errno 为一个正值,该值可通过 perror 来解释。

example:

#include <stdio.h>

int main()
{
  FILE* fp;
  int len;

  fp=fopen("test.txt","r");

  if(fp==NULL)
  {
    perror("error when open");
    return -1;
  }

  fseek(fp,0,SEEK_END);

  len=ftell(fp);
  fclose(fp);

  printf("size of file:%d Bytes",len);
  return 0;
}

运行结果:

以上内容来源于网络,仅作本人学习笔记使用,关于本书请参APUE

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值