linux lseek 指定 文件大小,linux下通过lseek()实现文件大小设置
一 函数介绍:
函数名: 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()实现文件大小设置相关推荐
- linux清楚指定文件夹下的空文件夹
要在 Linux 系统中清除指定文件夹下的空文件夹,可以使用 rmdir 命令. 例如,如果要清除 ~/documents 文件夹下的所有空文件夹,可以使用以下命令: find ~/documents ...
- linux java读取文件夹下文件名,Java获取Linux上指定文件夹下所有第一级子文件夹...
说明:需要只获得第一级文件夹目录 package com.sunsheen.jfids.studio.monitor.utils; import java.io.BufferedReader; imp ...
- linux cron指定用户,Centos下crontab指定执行用户
Centos下可以通过配置crontab来定时执行任务,执行体可以是一条系统命令或自己写的一个脚本,同时可以指派用户来执行.配置crontab有两种方法. 方法1.使用crontab命令,例如添加一个 ...
- linux 以指定内存单位(B,KB,MB...)显示文件大小
通常使用ll命令来显示文件夹下所有文件/子文件夹的大小.权限等信息 但是,这个命令显示的内存大小默认是以字节(B)为单位的,不方便查看 所以,可以用一下命令来自定义单位: ll --block-siz ...
- linux django 指定端口,linux部署django项目流程(全)
##2.安装依赖包 yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel ...
- linux到指定目录,linux移动文件到指定目录操作方法
摘要 腾兴网为您分享:第七应用,flash29,信息来电闪光灯,优惠购,实况足球2018,汕大附一,同学聚会简单通知书,cajviewer,惠普deskjet1010,英魂之刃,运动世界,建行大学,爱 ...
- linux mount 指定用户名,linux中mount/umount命令的基本用法及开机自动挂载方法
本文介绍了linux中mount/umount命令的基本用法及开机自动挂载,具体方法如下: mount命令格式如下: 格式:mount [-参数] [设备名称] [挂载点] 其中常用的参数有: -a ...
- linux bzip指定名称,Linux命令学习手册-bzip2命令
bzip2 [-cdfhkLstvVz][--repetitive-best][--repetitive-fast][- 压缩等级][要压缩的文件] [功能] 将文件压缩成bz2格式. [举例] *压 ...
- linux lseek 指定 文件大小,Linux lseek函数的使用详解
注:如果文章内容有误,请留言指出,谢谢合作. 名字 Name : lseek - reposition read/write file offset lseek函数的作用是用来重新定位文件读写的位移. ...
最新文章
- 结合html和css制作页面的布局结构,CSS Div网页布局中的结构与表现
- 笨方法“学习python笔记之转义序列
- opencv linux 编译好,linux下编译opencv
- MyBatis→优缺点、select延迟加载、接口式MyBatis编程、一级缓存、二级缓存、集成Redis自定义缓存、Log4j
- 7.从Paxos到Zookeeper分布式一致性原理与实践---Zookeeper 技术内幕
- Xcode 9.0 报错, Safe Area Layout Guide Before IOS 9.0 和launch screens may not set custom classnames报错
- 【泛函分析】 1 距离空间
- 个人税收计算器(只限长沙)全线仿照九米个税计算器
- 文本文件单词的检索与计数c语言,文本文件单词的检索与计数
- Windows Server 2008安装配置IIS
- WordPress主题_大前端DUX主题7.1原版+优化-91apps.cn就要应用网
- 亚马逊测评做单总是被砍单封号是什么原因?
- 致远SPM解决方案之安全管理
- 软件工程-软件的本质特征
- 两个数学家的问题,“你不知道我不知道你知道我知道”
- 社区活动| Apache Doris 社区开发者会议议题征集中
- Windows补丁查找及安装
- java开源工作流引擎优势是什么?
- word查找替换正则式的一例
- 一曲相思(Cover:阿悠悠)完整SQ版mp3 免费下载