文件读写位置的移动:每一个已打开的文件都有一个读写位置。当打开文件时通常读写位置是指向文件开头,若是以附加的方式打开文件,则读写位置会指向文件末尾。read或write函数读写文件时,读写位置会随相应移动。可以用lseek函数在文件内容中的位置上面移动,这样就可以在文件中不同的位置进行上读写。这个函数的使用方法如下所示。
01 off_t lseek(int fd,off_t offset ,int whence);
在参数列表中,fd表示用open函数打开的文件返回编号。参数offset是根据参数whence来移动读写位置的位移数。whence为系统定义的常量,可能有下面这些可能赋值。
SEEK_SET:参数offset即为新的读写位置。
SEEK_CUR:以目前的读写位置往后增加offset个位移量。
SEEK_END:将读写位置指向文件尾后再增加offset个位移量。
当whence值为SEEK_CUR或SEEK_END时,参数offet允许负值的出现。这时表示在当前位置上向前移动若干个字节。下面是一些常用的文件位置移动方式。
lseek(int fd,0,SEEK_SET):将读写位置移到文件开头。
lseek(int fd,0,SEEK_END):将读写位置移到文件结尾。
lseek(int fd,0,SEEK_CUR):取得当前的文件位置。
函数调用成功时返回这个文件当前的读写位置,即距文件开头多少个字节。若有错误则返回-1,errno 会存放错误代码。这个函数可能产生的错误代码如下所示。
EBADF:传入的参数不是一个已经打开的文件。
EINVAL:给入的whence参数不合理。
EOVERFLOW:给入的移动参数导致文件头指针指向了文件头以前,产生了溢出错误。
要使用这个函数,需要在程序的前面包含下面的头文件。
#include<sys/types.h>
#include<unistd.h>
01 off_t lseek(int fd,off_t offset ,int whence);
在参数列表中,fd表示用open函数打开的文件返回编号。参数offset是根据参数whence来移动读写位置的位移数。whence为系统定义的常量,可能有下面这些可能赋值。
SEEK_SET:参数offset即为新的读写位置。
SEEK_CUR:以目前的读写位置往后增加offset个位移量。
SEEK_END:将读写位置指向文件尾后再增加offset个位移量。
当whence值为SEEK_CUR或SEEK_END时,参数offet允许负值的出现。这时表示在当前位置上向前移动若干个字节。下面是一些常用的文件位置移动方式。
lseek(int fd,0,SEEK_SET):将读写位置移到文件开头。
lseek(int fd,0,SEEK_END):将读写位置移到文件结尾。
lseek(int fd,0,SEEK_CUR):取得当前的文件位置。
函数调用成功时返回这个文件当前的读写位置,即距文件开头多少个字节。若有错误则返回-1,errno 会存放错误代码。这个函数可能产生的错误代码如下所示。
EBADF:传入的参数不是一个已经打开的文件。
EINVAL:给入的whence参数不合理。
EOVERFLOW:给入的移动参数导致文件头指针指向了文件头以前,产生了溢出错误。
要使用这个函数,需要在程序的前面包含下面的头文件。
#include<sys/types.h>
#include<unistd.h>
int fd_file;
char file[255]="";
char file_buffer[1024];
strcat(strcpy(file,mainpath),"\\file.txt");
if((fd_file=open(file,O_RDONLY))==0)
{
printf("%s\n",strerror(errno));
}
else
{
read(fd_file,file_buffer,4);
printf("%s\n",file_buffer);
lseek(fd_file,0,SEEK_SET);
read(fd_file,file_buffer,4);
printf("%s\n",file_buffer);
lseek(fd_file,-4,SEEK_CUR);
read(fd_file,file_buffer,4);
printf("%s\n",file_buffer);
close(fd_file);
}