Linux ---lseek() 函数

每个打开的文件都有一个与其相关连的“当前文件偏移量”( current file offset )。它通常是一个非负整数,用以度量从文件开始处计算的字节数。通常,读、写操作都从当前文件偏移量开始,并使偏移量增加所读写的字节数。按系统默认情况,当打开一个文件时,除非指定 O_APPEND 选项,否则该偏移量设置为 0。

lseek调用仅将当前的文件偏移量记录在内核中,它并不引起任何的 I/O 操作。然后,该偏移量用于下一个读或写操作。

函数原型

#include<unistd.h>

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

参数fildes 为已打开的文件描述词,参数offset 为根据参数whence来移动读写位置的位移数。

whence为下列其中一种:(SEEK_SET,SEEK_CUR和SEEK_END和依次为0,1和2).

SEEK_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取值不当。

注:Linux系统不允许lseek()对tty装置作用,此项动作会令lseek()返回ESPIPE。

时间: 2024-10-04 18:59:55

Linux ---lseek() 函数的相关文章

linux文件函数-lseek

linux文件函数-write 一 定位文件 函数名:lseek 函数原形: off_t lseek(int fd, off_t offset, int whence) 函数功能:移动文件指针 所属头文件: #include<sys/types.h> #include<unistd.h> 返回值: 成功:返回移动后的文件指针到文件开头的字节数即偏移量 失败:返回-1 参数说明 fd:要定位的文件的描述符 offset:偏移量,整数向后移,负数向前移 whence:文件指针的位置 S

Linux文件I/O编程(二)lseek函数

文件I/O编程处理open.read.write.close,等必要函数对文件进行读写操作外,lseek.fcntl也是I/O编程很重要的函数. lseek函数 lseek函数主要用来移动当前读写位置,第一个参数是文件描述符fd,第二个参数是偏移距离,第三个参数是文件内容指针宏,分别有SEEK_SET(文件头),SEEK_CURR(当前位置),SEEK_END(文件尾部).该函数的执行成功返回文件当前位置的偏移量,若是失败返回-1. 改变文件位置指针很重要,如果处理不好会出现读写文件时读取错误数

linux系统调用函数

Linux应用编程学习笔记                                 周学伟 一.系统调用文件编程   1.文件打开函数 /***************************************************************************** 函数名:open 函数原型:int open(const char * pathname, int flags) int open(const char * pathname,int  flags,

Linux mmap函数简介

一.简介 Linux提供了内存映射函数mmap, 它把文件内容映射到一段内存上(准确说是虚拟内存上), 通过对这段内存的读取和修改, 实现对文件的读取和修改, 先来看一下mmap的函数声明: 头文件: <unistd.h> <sys/mman.h> 原型: void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offsize); 返回值: 成功则返回映射区起始地址, 失败则返回MAP_FAI

4.lseek函数及共享文件

4.1.lseek函数介绍 (1)当我们要对1个文件进行读写时,首先需打开该文件,则我们读写的所有文件都是动态文件:动态文件在内存中就是以文件流的形式存在的. (2)文件流很长,里面有很多个字符,我们需要确定当前正在操作的是哪个位置:GUI模式下的软件用光标来标识当前正在操作文件流的哪个位置:在动态文件中则通过文件指针(即Vnode结构体中的1个元素)来标识当前正在操作文件流哪个位置:文件指针不能被直接访问,linux系统使用lseek函数来访问该文件指针. (3)当我们打开1个空文件时,默认情

linux内核函数库文件的寻找

linux内核函数的so库文件怎么找呢? 首先还是要产生一个进程的coredump文件的 linux有一个lib-gdb.so库,这个进程的coredump文件中所有load段的最后一个load段中,通过读取二进制文件将最后一个load段读取出来保存lib-gdb.so库文件,这个库文件就是内核函数的库文件. coredump文件头->多个程序头(每一个程序头都会对应一个load段)->通过程序头读取load段

动态替换Linux核心函数的原理和实现

转载:https://www.ibm.com/developerworks/cn/linux/l-knldebug/ 动态替换Linux核心函数的原理和实现 在调试Linux核心模块时,有时需要能够实时获取内部某个路径上的某些函数的执行状态,例如查看传入的变量是否是期望的值,以便判断整个执行流程是否依然正常.由于系统运行时的动态性,使得在执行之前无法预先知道在执行路径的什么地方可能出现问题,因此只能在整个路径上增加许多不必要的信息查询点,造成有用的状态信息被淹没,而且这种增加信息输出的方式(一般

linux进程调度函数浅析(基于3.16-rc4)

众所周知,进程调度使用schedule()函数来完成,下面我们从分析该函数开始,代码如下(kernel/sched/core.c): 1 asmlinkage __visible void __sched schedule(void) 2 { 3 struct task_struct *tsk = current; 4 5 sched_submit_work(tsk); 6 __schedule(); 7 } 8 EXPORT_SYMBOL(schedule); 第3行获取当前进程描述符指针,存

文件IO详解(七)---lseek函数详解

lseek函数用来设置当前文件偏移量. ====================================================== 函数原型: 函数参数: fd:要操作的文件描述符 offset:基于whence参数的偏移量 whence:参考点位置 返回值: 调用成功时返回当前相对于文件开头的偏移量,以字节为单位 调用失败时返回 -1,并修改errno的值 ======================================================= when