seek函数(linux lseek函数怎么用)
本文目录
- linux lseek函数怎么用
- 请教一下,QT 中读取文件时,有没有倒着读取的比如我想读取文件后100*100个数据,C/c++的seek函数就可以
- c语言中fseek函数怎样指到文件末尾
- seek函数用法python
- 用C语言实现文件读写操作(4)
- 问一个关于lseek函数的效率问题
- c语言 怎么样把一个三维数组写入一个txt的文件然后读入另一个三维数组里
- c++中的seekg函数
- 为什么C语言中read函数和write函数间要用lseek来调整读取顺序
- Python文件读取中:f.seek(0)和f.seek(0,0)有什么区别
linux lseek函数怎么用
Linux的lseek函数用来控制一个打开的文件的读写位置,它的函数原型如下:
off_t lseek(int fildes,off_t offset ,int whence);
参数的用法:fildes参数为一个已打开的文件描述符;参数offset为读写位置的位移数,这个位移数是根据参数whence来确定的;whence参数分为下列三种:
SEEK_SET:表示offset用来直接设置读写位置。
SEEK_CUR:表示以目前的读写位置往后增加offset个位移量。
SEEK_END:表示将读写位置指向文件尾后再增加offset个位移量。
当whence值为SEEK_CUR或SEEK_END时,参数offet允许负值出现。当lseek调用成功时返回目前的读写位置,也就是距离文件开头多少个字节。若有错误则返回-1,errno会存放错误代码。下面是几个使用示例:
将读写位置移到文件开头:lseek(myfile, 0, SEEK_SET);
将读写位置移到文件尾:lseek(myfile, 0, SEEK_END);
想要取得目前文件位置:off_t cur=lseek(myfile, 0, SEEK_CUR);
注意:使用lseek函数需要包含以下头文件:
#include 《sys/types.h》
#include 《unistd.h》
请教一下,QT 中读取文件时,有没有倒着读取的比如我想读取文件后100*100个数据,C/c++的seek函数就可以
QT的QIOdevice,QTextStream等也有seek函数,你可以调用它以实现你所需的功能。
QFile file("/home/hamad/lesson11.txt");
if(!file.open(QIODevice::ReadOnly)){
QMessageBox::information(0,"error", file.errorString());
}
QTextStream in(&file);
//in.pos(); //返回当前文件指针位置
in.seek(POS)//POS为你要跳转到的位置,这里最好接收下返回值,以便出错处理
while(!in.atEnd()){
QString line =in.readLine();
QStringList fields = line.split(",");
model-》appendRow(fields);
}
file.close();
c语言中fseek函数怎样指到文件末尾
fseek有三个参数,第1个是文件句柄,通过打开文件时得到;第2个就是移动的字节数,这个数可以是正的,就是向后(文件尾部)移动,也可以是负的,即向前(文件头部)移动;第3个参数指明从哪里移动,如果写SEEK_SET就是从文件头部移动多少字节,如果
seek函数用法python
参数offset--开始的偏移量,也就是代表需要移动偏移的字节数whence:可选,默认值为0。
给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。
file.seek(off,whence=0):从文件中移动off个操作标记(文件指针),正往结束方向移动,负往开始方向移动。
如果设定了whence参数,就以whence设定的起始位为准,0代表从头开始,1代表当前位置,2代表文件最末尾位置。
用C语言实现文件读写操作(4)
用C语言实现文件读写操作
二、直接I/O文件操作
这是C提供的另一种文件操作,它是通过直接存/取文件来完成对文件的处理,而上篇所说流式文件操作是通过缓冲区来进行;流式文件操作是围绕一个 FILE指针来进行,而此类文件操作是围绕一个文件的“句柄”来进行,什么是句柄呢?它是一个整数,是系统用来标识一个文件(在WINDOWS中,句柄的概念扩展到所有设备资源的标识)的唯一的记号。此类文件操作常用的函数如下表,这些函数及其所用的一些符号在io.h和fcntl.h中定义,在使用时要加入相应的头文件。
函数 说明
open() 打开一个文件并返回它的句柄
close() 关闭一个句柄
lseek() 定位到文件的指定位置
read() 块读文件
write() 块写文件
eof() 测试文件是否结束
filelength() 取得文件长度
rename() 重命名文件
chsize() 改变文件长度
下面就对这些函数一一说明:
1.open()
打开一个文件并返回它的句柄,如果失败,将返回一个小于0的值,原型是int open(c***t char *path, int access ); 参数path是要打开的文件名,access是打开的模式,mode是可选项。表示文件的属性,主要用于UNIX系统中,在DOS/WINDOWS这个参数没有意义。其中文件的打开模式如下表。
符号 含义 符号 含义 符号 含义
O_RDONLY 只读方式 O_WRONLY 只写方式 O_RDWR 读/写方式
O_NDELAY 用于UNIX系统 O_APPEND 追加方式 O_CREAT 如果文件不存在就创建
O_TRUNC 把文件长度截为0 O_EXCL 和O_CREAT连用,如果文件存在返回错误 O_BINARY 二进制方式
O_TEXT 文本方式
对于多个要求,可以用"|"运算符来连接,如O_APPEND|O_TEXT表示以文本模式和追加方式打开文件。
例:int handle=open("c:\\msdos.sys",O_BINARY|O_CREAT|O_WRITE)
2.close()
关闭一个句柄,原型是int close(int handle);如果成功返回0
例:close(handle)
3.lseek()
定位到指定的位置,原型是:long lseek(int handle, long offset, int fromwhere);参数offset是移动的量,fromwhere是移动的基准位置,取值和前面讲的fseek()一样,SEEK_SET:文件首部;SEEK_CUR:文件当前位置;SEEK_END:文件尾。此函数返回执行后文件新的存取位置。
例:
lseek(handle,-1234L,SEEK_CUR);//把存取位置从当前位置向前移动1234个字节。
x=lseek(hnd1,0L,SEEK_END);//把存取位置移动到文件尾,x=文件尾的位置即文件长度
4.read()
从文件读取一块,原型是int read(int handle, void *buf, unsigned len);参数buf保存读出的数据,len是读取的字节。函数返回实际读出的字节。
例:char x;read(hnd1,x,200);
5.write()
写一块数据到文件中,原型是int write(int handle, void *buf, unsigned len);参数的含义同read(),返回实际写入的字节。
例:char x="I Love You";write(handle,x,strlen(x));
7.eof()
类似feof(),测试文件是否结束,是返回1,否则返回0;原型是:int eof(int handle);
例:while(!eof(handle1)){……};
8.filelength()
返回文件长度,原型是long filelength(int handle);相当于lseek(handle,0L,SEEK_END)
例:long x=filelength(handle);
9.rename()
重命名文件,原型是int rename(c***t char *oldname, c***t char *newname); 参数oldname是旧文件名,newname是新文件名。成功返回0
例:rename("c:\\config.sys","c:\\config.w40");
10.chsize();
改变文件长度,原型是int chsize(int handle, long size);参数size表示文件新的长度,成功返回0,否则返回-1,如果指定的长度小于文件长度,则文件被截短;如果指定的长度大于文件长度,则在文件后面补’’\0’’。
例:chsize(handle,0x12345);
;问一个关于lseek函数的效率问题
lseek是库函数。
库函数就是C++最基本的函数,也就是说没有这些东西无法定义C++。
C++的制定标准,并不决定库函数的底层是如何实现的,主要决定实现结果和大致逻辑。
所以,对于不同系统不同型号机器的lseek,它的实现是不一样的。
在大多数系统中,lssek的执行只是改变一个内存中的值。计算机读取磁盘很慢,而内存很快,于是操作系统在内存中会事先保存好多值,当下一个读盘周期开始的时候,计算机会以最优化的读取顺序读取内存中设置的磁盘位置,lssek改变的就是那个位置。
所以耗时依赖你的系统和硬件,10000 比100未必慢
c语言 怎么样把一个三维数组写入一个txt的文件然后读入另一个三维数组里
现在是你在写程序 ,具体的写入顺序是由你自己定义的,你想怎么写就怎么写!但是 就读写来说:
C 语言的读写文件函数里面是一个读写指针,如果是需要写完之后去读的话 需要移动文件读写指针到文件开头才能正常读写。
下面是几个有用的函数(百科都有的)
***隐藏网址***
重定位流(数据流/文件)上的文件内部位置指针
注意:不是定位文件指针,文件指针指向文件/流。位置指针指向文件内部的字节位置,随着文件的读取会移动,文件指针如果不重新赋值将不会改变指向别的文件。
本段用 法
int fseek(FILE *stream, long offset, int fromwhere);
本段描 述
函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere(偏移起始位置:文件头0(SEEK_SET),当前位置1(SEEK_CUR),文件尾2(SEEK_END))为基准,偏移offset(指针偏移量)个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。
fseek函数和lseek函数类似,但lseek返回的是一个off_t数值,而fseek返回的是一个整型。
***隐藏网址***
函数fopen
函数简介
函数功能:打开一个文件
函数原型:FILE * fopen(c***t char * path,c***t char * mode);
相关函数:open,fclose,fopen_s,_wfopen
所需库:《stdio.h》
返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。
一般而言,打开文件后会作一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以一般在fopen()后作错误判断及处理。
***隐藏网址***
fwrite
本段功能
C语言函数,向文件写入一个数据块
本段用法
size_t fwrite(c***t void* buffer, size_t size, size_t count,
FILE* stream);
注意:这个函数以二进制形式对文件进行操作,不局限于文本文件
返回值:返回实际写入的数据块数目
(1)buffer:是一个指针,对fwrite来说,是要输出数据的地址;
(2)size:要写入内容的单字节数;
(3)count:要进行写入size字节的数据项的个数;
(4)stream:目标文件指针;
(5)返回实际写入的数据项个数count。
说明:写入到文件的哪里? 这个与文件的打开模式有关,如果是w+,则是从file
pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变,stream的位置移动count个数;如果是a+,则从文件的末尾开始添加,文件长度加大。
fseek对此函数有作用,但是fwrite函数写到用户空间缓冲区,并未同步到文件中,所以修改后要将内存与文件同步可以用fflush(FILE
*fp)函数同步。
c++中的seekg函数
seekg()是对输入流的操作g是get缩写
输入流类的成员函数的名字seekg由两部分组成。首先是seek(寻找)到文件中的某个地方,其次是"g"表示"get",指示函数在输入流上工作,因为要从输入流获取数据。
要查找的文件中的新位置由两个形参给出:新位置将从由place给出的起始位置开始,偏移offset个字节。offset形参是一个long类型的整数,而place可以是ios类中定义的3个值之一。
起始位置可能是文件的开头、文件的当前位置或文件的末尾,这些地方分别由常量ios::beg、ios::cur和ios::end表示。
扩展资料
seekg函数的使用
#include《iostream》
#include《fstream》
usingnamespacestd;
intmain()
{
//Variablesneededtoreadorwritefileonecharacteratatimecharch;
fstreamioFile("rewind.txt",ios::out);
//Openfile.
if(!ioFile)
{
cout《《"Errorintryingtocreatefile";
return0;
}
//Writetofileandclose
ioFile《《"Allgooddogs"《《endl《《"growl,bark,andeat."《《endl;
ioFile.close();
//Openthefile
ioFile.open("rewind.txt",ios::in);
if(!ioFile)
{
cout《《"Errorintryingtoopenfile";
return0;
}
//Readthefileandechotoscreen
ioFile.get(ch);
while(!ioFile.fail())
{
cout.put(ch);
ioFile.get(ch);
}
//Rewindthefile
ioFile.clear();
ioFile.seekg(0,ios::beg);
//Readfileagainandechotoscreen
ioFile.get(ch);
while(!ioFile.fail())
{
cout.put(ch);
ioFile.get(ch);
}
return0;
}
为什么C语言中read函数和write函数间要用lseek来调整读取顺序
-由于程序在打开文件时文件操作指针位于文件起始位置,即偏移量0
-读取了1个字符的内容给变量c,文件指针偏移量为1
-这时如果想将c值写到文件开始位置,则需要移动文件指针到文件开始
-于是lseek就是移动文件当前指针的语句,它通知系统将文件指针移动到从文件开始位置(SEEK_SER)起的第0字节
-这个程序比较奇怪,明明打开文件时选用了0_WRONLY参数,表明这个打开是只写的,但上来就读
Python文件读取中:f.seek(0)和f.seek(0,0)有什么区别
seek(0)和f.seek(0,0)是没有区别的。
file.seek()方法标准格式是:seek(offset,whence=0)offset:开始的偏移量,也就是代表需要移动偏移的字节数whence:给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。默认为0
whence 的默认参数是0。
whence 还有两种情况 是1,或者2:
1的时候,相对当前坐标的移动,可以是正的也可以是负的。
2的时候相对于文件结束的移动,通常应该是负的。
扩展资料
python 文件读写操作:
读文件
打开一个文件用open()方法(open()返回一个文件对象,它是可迭代的):
》》》 f = open(’test.txt’, ’r’)
r表示是文本文件,rb是二进制文件。(这个mode参数默认值就是r)
如果文件不存在,open()函数就会抛出一个IOError的错误,并且给出错误码和详细的信息告诉你文件不存在:
》》》 f=open(’test.txt’, ’r’)
Traceback (most recent call last):
File "《stdin》", line 1, in 《module》
FileNotFoundError: No such file or directory: ’test.txt’
文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的
》》》 f.close()
由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。
本文相关文章:
c语言sort函数从小到大排序(c语言:编写一个函数名字为sort,完成对三个整数从小到大排序,要求用指针实现)
2026年4月20日 18:40
常用15个excel函数公式活学活用(excel中最常用的30个函数)
2026年4月19日 16:00
strstr忽略大小写(C++问题:请问如何让 strstr()函数忽略大小写尽量优化运行时间)
2026年4月17日 07:20
wavwrite函数(百度matlab有什么函数可以自己命名后保存wav音频文件注意!!!)
2026年4月17日 04:20
lookupmid函数的使用方法(关于EXCEL的函数,VLOOKUP与MID怎么复合使用)
2026年4月16日 19:40
countif函数使用注意事项(excel中的countif函数怎么用)
2026年4月16日 08:20
字符串型怎么转化为数字类型(在EXCEL中有什么函数可以把字符型转成数字型)
2026年4月15日 15:40
构造函数的作用c(c++类中,默认构造函数究竟有什么作用为何声明对象后就要自动调用它这有何意义)
2026年4月12日 10:40
stl vector用法(C++中STL的vector容器的析构函数怎么用)
2026年4月12日 08:20
更多文章:
****marker循环(****marker生成复杂word时,用循环循环不出来<w:p>标签)
2026年4月21日 04:20
hibernate实例教程(Hibernate的多对一和一对多操作实例)
2026年4月21日 04:00
this怎么读的英文(一直想问下this这个到底怎么发音啊)
2026年4月21日 03:20
echarts立体柱状图(在vue项目中使用echarts制作3d柱状图)
2026年4月21日 03:00


