Linux lseek函数的使用详解
作者:Sino_Crazy_Snail 发布时间:2022-07-28 22:14:18
注:如果文章内容有误,请留言指出,谢谢合作。
名字
Name : lseek - reposition read/write file offset
lseek函数的作用是用来重新定位文件读写的位移。
头文件以及函数声明
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
offset为正则向文件末尾移动(向前移),为负数则向文件头部(向后移)。
描述
lseek() repositions the file offset of the open file description associated with the file descriptor fd to the argument offset according to the directive whence as follows:
SEEK_SET The file offset is set to offset bytes.
SEEK_CUR The file offset is set to its current location plus offset bytes.
SEEK_END The file offset is set to the size of the file plus offset bytes.
lseek() allows the file offset to be set beyond the end of the file (but this does not change the size of the file). If data is later written at this point, subsequent reads of the data in the gap (a “hole”) return null bytes (‘\0') until data is actually written into the gap.
lseek()函数会重新定位被打开文件的位移量,根据参数offset以及whence的组合来决定:
SEEK_SET:
从文件头部开始偏移offset个字节。
SEEK_CUR:
从文件当前读写的指针位置开始,增加offset个字节的偏移量。
SEEK_END:
文件偏移量设置为文件的大小加上偏移量字节。
测试代码:
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#define BUFFER_SIZE 1024
#define SRC_FILE_NAME "src_file"
#define DEST_FILE_NAME "dest_file"
//根据传入的参数来设置offset
#define OFFSET (atoi(args[1]))
int main(int argc, char*args[]) {
int src_file, dest_file;
unsigned char buff[BUFFER_SIZE];
int real_read_len, off_set;
if (argc != 2) {
fprintf(stderr, "Usage: %s offset\n", args[0]);
exit(-1);
}
src_file = open(SRC_FILE_NAME, O_RDONLY);
dest_file = open(DEST_FILE_NAME, O_WRONLY | O_CREAT, S_IREAD | S_IWRITE );//owner权限:rw
if (src_file < 0 || dest_file < 0) {
fprintf(stderr, "Open file error!\n");
exit(1);
}
off_set = lseek(src_file, -OFFSET, SEEK_END);//注意,这里对offset取了相反数
printf("lseek() reposisiton the file offset of src_file: %d\n", off_set);
while((real_read_len = read(src_file, buff, sizeof(buff))) > 0) {
write(dest_file, buff, real_read_len);
}
close(dest_file);
close(src_file);
return 0;
}
结果解析
观察offset以及dest_file和src_file文件的大小不难看出:程序通过lseek函数将src_file文件指针重新定位到文件末尾 + offset(注意,本程序对offset取了相反数,即文件末尾 + (-offset))处,然后从文件末尾 + offset处开始向前复制文件到dest_file中。
来源:https://blog.csdn.net/Sino_Crazy_Snail/article/details/80777316


猜你喜欢
- 网站可用性关系到它能为用户节省多少时间。网站可用性越高,用户体验也就越高,用户也就会增加停留在网站上的时间。当一个经验不足的用户通过你网站的
- google和金山词霸合作了。看重的是金山词霸3kw的用户。google表示这三千万的用户,可以直接成为google的搜索用户。他们认为这个
- 英文原文:Five Best FTP Clients无论你是做网站工作,还是运行一个家庭FTP服务器,或者你只是喜欢高速下载,一个稳定且功能
- 昨天,张小姐的飞信突然“自动登录”,并向她的十余位亲友发出中奖信息。最近,中国移动飞信业务正在遭遇一
- 核心提示: 一个网站要建立好良好的形象,必定要“扬长避短”。通过robots.txt来限制蜘蛛的爬行页面,不让蜘蛛爬行质量比较低劣的网页。G
- 使用yum可以进行连通依赖关系一起进行安装,而是用–downloadonly –downloaddir选项则可以不进行安装,而将rpm连同依
- 1, 梦想靠淘宝客发大财的。其实,无论阿里妈妈还是其他淘宝客把淘宝客说的天花乱坠,无论多少人说他通过淘宝客赚了多少多少钱,淘宝客终其特性决定
- 一、Wordpress Mu是Wordpress的多用户版,虽然在内核上是一样的,但是也有一些插件、模板并不能通用,一部分可以通过简单的修改
- 一,准备工作1,登录进VPS控制面板,准备好随时重启VPS。2,关闭Web Server先,过高的负载会导致后面的操作很难进行,甚至直接无法
- Godaddy主机用户从eNom转入域名 eNom注册可接收源自个注册处的转移。使用我们的RapidTransferSystem,域名转移常
- 今年过完年,我跑去福山打算在福山我爸爸朋友那里打工为生,因去年在伟创力做事,知道打工的生活我并不合适,更不能赚到钱,因为我用钱习惯了大手大脚
- Apache Web 服务器可以通过 .htaccess 文件来操作各种信息,这是一个目录级配置文件的默认名称,允许 * 化的 Web 服务
- Docker容器 日志中文乱码问题解决办法1. 找到dockerfile文件, 如 /use/local/src/Docker/Docker
- 百度贴吧里至今还能搜出不少对曾先生的诽谤帖。本报记者陈伟斌摄昨日,记者接到惠东一位曾先生的求助电话,他说一个月前,百度贴吧里出现了几个透露了
- 有一阵子着实对Ubuntu的网络配置很迷惑,耐下心来仔细上网找了找,有点小心得,总结一下。先说下大概的配置过程,再去细究一些情况。一、配置大
- google adsense的搜索广告,有二种形式,一是传统的搜索框,二是不久前推出的“搜索联盟”。这二种有何区别呢?下面做一下介绍。一、搜
- 自己接触优化有一段时日了,经常有不少朋友加我QQ,问我如何把他说的关键字做到百度或者谷歌首页第一位,怎么跟他们说呢,我只能告诉他们,网站排名
- 1、Google提交http://www.google.com/addurl/?hl=zh_CN2、百度提交http://www.baidu
- 架设FTP服务器,一向是把安全放在首位,特别是利用IIS之类工具建立起来的FTP服务器更是如此。如果设置不当遭受到恶意攻击,那造成整个服务器
- CCTV的新闻联播在2007年12月27日播出一段抨击不良网络视听节目的报道,其中采访了一个名叫张殊凡的女学生,这个叫张殊凡的孩子语出惊人,