一 函数介绍:

函数名: lseek()

功 能: 移动文件读/写指针

所需头文件:

#include

#include

函数原型:

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

重新定位已打开的文件的偏移量,与whence的取值有关;

参数:

fd:文件描述符,对应已经打开的文件;

offset:指出偏移量;

whence:指出偏移的方式,取值如下:

SEEK_SET:偏移到offset位置处(相对文件头)

SEEK_CUR:偏移到当前位置+offset位置处;

SEEK_END:偏移到文件尾+offset位置处;

返回值:

调用成功则返回最终的偏移量(从文件头开始数);

调用失败则返回-1,并设置相应的errno;

二 巧妙利用

1. 返回当前的偏移量

off_t currpos;

currpos = lseek(fd, 0, SEEK_CUR);

2. 返回文件大小

off_t currpos;

currpos = lseek(fd, 0, SEEK_END);

3. 扩充文件大小

lseek()方法允许偏移

这个技巧也可用于判断我们是否可以改变某个文件的偏移量。如果参数 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)决定的。

概念补充:

当前文件偏移量(current file offset),以下简称为 cfo。cfo 通常是一个非负整数,用于表明文件开始处到文件当前位置的字节数。读写操作通常开始于 cfo,并且使 cfo 增大,增量为读写的字节数。文件被打开时,cfo 会被初始化为 0,除非使用了 O_APPEND 。

linux lseek 指定 文件大小,linux下通过lseek()实现文件大小设置相关推荐

  1. linux清楚指定文件夹下的空文件夹

    要在 Linux 系统中清除指定文件夹下的空文件夹,可以使用 rmdir 命令. 例如,如果要清除 ~/documents 文件夹下的所有空文件夹,可以使用以下命令: find ~/documents ...

  2. linux java读取文件夹下文件名,Java获取Linux上指定文件夹下所有第一级子文件夹...

    说明:需要只获得第一级文件夹目录 package com.sunsheen.jfids.studio.monitor.utils; import java.io.BufferedReader; imp ...

  3. linux cron指定用户,Centos下crontab指定执行用户

    Centos下可以通过配置crontab来定时执行任务,执行体可以是一条系统命令或自己写的一个脚本,同时可以指派用户来执行.配置crontab有两种方法. 方法1.使用crontab命令,例如添加一个 ...

  4. linux 以指定内存单位(B,KB,MB...)显示文件大小

    通常使用ll命令来显示文件夹下所有文件/子文件夹的大小.权限等信息 但是,这个命令显示的内存大小默认是以字节(B)为单位的,不方便查看 所以,可以用一下命令来自定义单位: ll --block-siz ...

  5. linux django 指定端口,linux部署django项目流程(全)

    ##2.安装依赖包 yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel ...

  6. linux到指定目录,linux移动文件到指定目录操作方法

    摘要 腾兴网为您分享:第七应用,flash29,信息来电闪光灯,优惠购,实况足球2018,汕大附一,同学聚会简单通知书,cajviewer,惠普deskjet1010,英魂之刃,运动世界,建行大学,爱 ...

  7. linux mount 指定用户名,linux中mount/umount命令的基本用法及开机自动挂载方法

    本文介绍了linux中mount/umount命令的基本用法及开机自动挂载,具体方法如下: mount命令格式如下: 格式:mount [-参数] [设备名称] [挂载点] 其中常用的参数有: -a ...

  8. linux bzip指定名称,Linux命令学习手册-bzip2命令

    bzip2 [-cdfhkLstvVz][--repetitive-best][--repetitive-fast][- 压缩等级][要压缩的文件] [功能] 将文件压缩成bz2格式. [举例] *压 ...

  9. linux lseek 指定 文件大小,Linux lseek函数的使用详解

    注:如果文章内容有误,请留言指出,谢谢合作. 名字 Name : lseek - reposition read/write file offset lseek函数的作用是用来重新定位文件读写的位移. ...

最新文章

  1. 结合html和css制作页面的布局结构,CSS Div网页布局中的结构与表现
  2. 笨方法“学习python笔记之转义序列
  3. opencv linux 编译好,linux下编译opencv
  4. MyBatis→优缺点、select延迟加载、接口式MyBatis编程、一级缓存、二级缓存、集成Redis自定义缓存、Log4j
  5. 7.从Paxos到Zookeeper分布式一致性原理与实践---Zookeeper 技术内幕
  6. Xcode 9.0 报错, Safe Area Layout Guide Before IOS 9.0 和launch screens may not set custom classnames报错
  7. 【泛函分析】 1 距离空间
  8. 个人税收计算器(只限长沙)全线仿照九米个税计算器
  9. 文本文件单词的检索与计数c语言,文本文件单词的检索与计数
  10. Windows Server 2008安装配置IIS
  11. WordPress主题_大前端DUX主题7.1原版+优化-91apps.cn就要应用网
  12. 亚马逊测评做单总是被砍单封号是什么原因?
  13. 致远SPM解决方案之安全管理
  14. 软件工程-软件的本质特征
  15. 两个数学家的问题,“你不知道我不知道你知道我知道”
  16. 社区活动| Apache Doris 社区开发者会议议题征集中
  17. Windows补丁查找及安装
  18. java开源工作流引擎优势是什么?
  19. word查找替换正则式的一例
  20. 一曲相思(Cover:阿悠悠)完整SQ版mp3 免费下载

热门文章

  1. 学会感谢--谈辞职信的写法
  2. ancestral 箭头符号,英文字典
  3. 谷粒学院(十九)统计分析模块 | 定时任务 | echarts
  4. 会议记录管理系统(6) - 查找会议记录模块设计
  5. EXCEL表格单元格中有数字和文字怎么将数字部分提取出来
  6. 十行代码让你的单机“影分身”,分布式训练速度快到飞起
  7. 发表SCI或EI类英文文章的投稿经验
  8. 国内机器视觉发展如何实现逆风翻盘?
  9. 【Web前端HTML5CSS3】05-样式继承与其他概念
  10. Qt for winrt结合Winrt API开发