fseek函数用法 lockf函数
大家好,今天给各位分享fseek函数用法的一些知识,其中也会对lockf函数进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!
fseek函数的用法是什么
fseek函数用于重定位流(数据流/文件)上的文件内部位置指针。
函数原型int fseek(FILE*stream, long offset, int fromwhere);
参数:
stream为文件流的指针
offset偏移量
fromwhere起始位置
具体功能:如果执行成功,stream将指向以fromwhere(起始位置:文件头0(SEEK_SET),当前位置1(SEEK_CUR),文件尾2(SEEK_END))为基准,偏移offset(指针偏移量)个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。
扩展资料:
int fseek(FILE*stream, long offset, int fromwhere);
第一个参数file指针
第二个参数移动的偏移量
第三个参数移动到哪里
分别用3个宏
SEEK_SET既0文件开头
SEEK_CUR既1文件当前位置
SEEK_END既2文件结尾
但不推荐用数字最好用宏
参考资料来源:百度百科-fseek
fseek(f,0,SEEK_SET);
意思是把文件指针指向文件的开头
fseek
函数名: fseek
功能:重定位流上的文件指针
用法: int fseek(FILE*stream, long offset, int fromwhere);
描述:函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。
返回值:成功,返回0,否则返回其他值。
fseek position the file position pointer for the file referenced by stream to the byte location calculated by offset.
程序例:
#include<stdio.h>
long filesize(FILE*stream);
int main(void)
{
FILE*stream;
stream= fopen("MYFILE.TXT","w+");
fprintf(stream,"This is a test");
printf("Filesize of MYFILE.TXT is%ld bytes\n", filesize(stream));
fclose(stream);
return 0;
}
long filesize(FILE*stream)
{
long curpos, length;
curpos= ftell(stream);
fseek(stream, 0L, SEEK_END);
length= ftell(stream);
fseek(stream, curpos, SEEK_SET);
return length;
}
int fseek( FILE*stream, long offset, int origin);
第一个参数stream为文件指针
第二个参数offset为偏移量,整数表示正向偏移,负数表示负向偏移
第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END或 SEEK_SET
SEEK_SET:文件开头
SEEK_CUR:当前位置
SEEK_END:文件结尾
其中SEEK_SET,SEEK_CUR和SEEK_END和依次为0,1和2.
简言之:
fseek(fp,100L,0);把fp指针移动到离文件开头100字节处;
fseek(fp,100L,1);把fp指针移动到离文件当前位置100字节处;
fseek(fp,100L,2);把fp指针退回到离文件结尾100字节处。
使用实例:
#include<stdio.h>
#define N 5
typedef struct student{
long sno;
char name[10];
float score[3];
} STU;
void fun(char*filename, STU n)
{
FILE*fp;
fp= fopen(filename,"rb+");
fseek(fp,-1L*sizeof(STU),SEEK_END);
fwrite(&n, sizeof(STU), 1, fp);
fclose(fp);
}
void main()/*修改覆盖最后一个学生数据*/
{
STU t[N]={{10001,"MaChao", 91, 92, 77},{10002,"CaoKai", 75, 60, 88},
{10003,"LiSi", 85, 70, 78},{10004,"FangFang", 90, 82, 87},
{10005,"ZhangSan", 95, 80, 88}};
STU n={10006,"ZhaoSi", 55, 70, 68}, ss[N];
int i,j; FILE*fp;
fp= fopen("student.dat","wb");
fwrite(t, sizeof(STU), N, fp);
fclose(fp);
fp= fopen("student.dat","rb");
fread(ss, sizeof(STU), N, fp);
fclose(fp);
printf("\nThe original data:\n\n");
for(j=0; j<N; j++)
{
printf("\nNo:%ld Name:%-8s Scores:",ss[j].sno, ss[j].name);
for(i=0; i<3; i++) printf("%6.2f", ss[j].score[i]);
printf("\n");
}
fun("student.dat", n);
printf("\nThe data after modifing:\n\n");
fp= fopen("student.dat","rb");
fread(ss, sizeof(STU), N, fp);
fclose(fp);
for(j=0; j<N; j++)
{
printf("\nNo:%ld Name:%-8s Scores:",ss[j].sno, ss[j].name);
for(i=0; i<3; i++) printf("%6.2f", ss[j].score[i]);
printf("\n");
}
}
c语言中fseek函数怎么用
fseek函数是C语言中用于移动文件指针位置的核心函数,其用法和注意事项如下:
1.函数语法int fseek(FILE*stream, long int offset, int whence);参数说明:stream:指向已打开文件的指针(通过fopen获取)。
offset:偏移量(字节为单位),可为正(向后)、负(向前)或零。
whence:基准位置,可选值:SEEK_SET:从文件开头计算偏移。
SEEK_CUR:从当前指针位置计算偏移。
SEEK_END:从文件末尾计算偏移。
返回值:成功返回 0,失败返回-1并设置 errno(如文件未打开、越界访问等)。
2.常见用法示例(1)定位到文件开头fseek(fp, 0, SEEK_SET);//指针回到文件起始位置(2)定位到绝对位置fseek(fp, 100, SEEK_SET);//移动到第101字节(从0开始计数)(3)相对当前位置移动fseek(fp, 50, SEEK_CUR);//从当前位置向后移动50字节fseek(fp,-20, SEEK_CUR);//从当前位置向前移动20字节(4)从文件末尾定位fseek(fp,-10, SEEK_END);//移动到文件末尾前10字节处fseek(fp, 0, SEEK_END);//直接跳转到文件末尾(常用于追加数据)3.实际应用场景(1)读取文件特定部分FILE*fp= fopen("data.bin","rb");if(fp){ fseek(fp, 1024, SEEK_SET);//跳过前1024字节 char buffer[256]; fread(buffer, 1, 256, fp);//读取后续256字节 fclose(fp);}(2)获取文件大小long size;fseek(fp, 0, SEEK_END);size= ftell(fp);// ftell返回当前指针位置(即文件大小)rewind(fp);//重置指针到开头(等价于fseek(fp, 0, SEEK_SET))(3)修改文件中间内容fseek(fp, 50, SEEK_SET);fputc('X', fp);//在第51字节处写入字符'X'4.注意事项文件打开模式:需以可定位模式(如"r+"、"w+"、"a+")打开文件,否则可能失败。二进制 vs文本模式:在文本模式(如"r")下,某些系统(如Windows)可能因换行符转换导致偏移不准确。
推荐使用二进制模式("rb"/"wb")处理非文本文件。
错误处理:始终检查返回值,失败时可通过 perror或 strerror(errno)获取错误信息。边界检查:避免移动到文件范围之外(如 offset超过文件大小且 whence不是 SEEK_END)。5.完整示例代码#include<stdio.h>#include<errno.h>int main(){ FILE*fp= fopen("example.txt","rb+"); if(!fp){ perror("文件打开失败"); return 1;}//定位到第100字节并写入数据 if(fseek(fp, 100, SEEK_SET)!= 0){ perror("fseek失败"); fclose(fp); return 1;} fputs("HELLO", fp); fclose(fp); return 0;}通过合理使用 fseek,可以高效实现随机文件访问,适用于日志分析、数据库操作等需要快速定位的场景。务必结合错误处理确保程序健壮性。
如果你还想了解更多这方面的信息,记得收藏关注本站。