linux 使用lseek函数来获取文件大小

原文链接:https://blog.csdn.net/xiaokuang5020/article/details/74644866

一、获取文件大小

 

 
  1. /*测得文件大小*/

  2. int filelen;

  3. int fd;

 
  1.  
  2. int filelen= lseek(fd,0L,SEEK_END);

  3. lseek(fd,0L,SEEK_SET);

  4. printf("file size is %d\n",filelen);

 

二、lseek使用说明

表头文件
#include<sys/types.h>
#include<unistd.h>


定义函数
off_t lseek(int filde,off_t offset ,int whence);

 

 

EEK_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 会存放错误代码。
可能设置erron的错误代码:
EBADF: fildes不是一个打开的文件描述符。
ESPIPE:文件描述符被分配到一个管道、套接字或FIFO。
EINVAL:whence取值不当。

 

代码列子:

 

 
  1. #define BUFFER_SIZE 1024

  2. int main(int argc,char **argv)

  3. {

  4. int readfd, writefd;

  5. long filelen=0;

  6. int ret=1;

  7. char buffer[BUFFER_SIZE];

  8. char *ptr;

  9.  
  10. /*打开源文件*/

  11. if((readfd=open("test.txt", O_RDONLY|O_CREAT)) == -1)

  12. {

  13. printf("Open Error\n");

  14. exit(1);

  15. }

  16.  
  17. /*创建目的文件*/

  18. if((writefd=open("dest.txt", O_WRONLY|O_CREAT)) == -1)

  19. {

  20. printf("Open Error\n");

  21. exit(1);

  22. }

  23.  
  24. /*测得文件大小*/

  25. filelen= lseek(readfd,0L,SEEK_END);

  26. lseek(readfd,0L,SEEK_SET);

  27. printf("read file size is %d\n",filelen);

  28.  
  29. /*进行文件拷贝*/

  30. while(ret)

  31. {

  32. ret= read(readfd, buffer, BUFFER_SIZE);

  33. if(ret==-1)

  34. {

  35. printf("read Error\n");

  36. exit(1);

  37. }

  38. write(writefd, buffer, ret);

  39. filelen-=ret;

  40. bzero(buffer,BUFFER_SIZE);

  41. }

  42.  
  43. close(readfd);

  44. close(writefd);

  45. exit(0);

  46. }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值