前言:
目前姐妹们对“c语言lseek”大约比较讲究,兄弟们都想要学习一些“c语言lseek”的相关文章。那么小编也在网络上收集了一些有关“c语言lseek””的相关文章,希望我们能喜欢,大家快快来了解一下吧!感谢您的阅读与点赞!欢迎关注:「大猫玩程序」,查看C语言系列文章
上一节主要讲解了文件的打开、关闭、读取和写入操作。
这一节讲解流\文件的 读写位置\刷新等操作。
移动文件流的读写位置:fseek()
作用:把与stream有关的文件位置指针放到一个指定位置
原型:int fseek(FILE *stream, long offset, int fromwhere);
返回值:如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置,函数返回一个非0值。
范例一:fseek(fp, 0L, SEEK_END);
解释:文件指针定位到文件末尾,偏移0个字节
范例二: fseek(fp,50L,0);或fseek(fp,50L,SEEK_SET);
解释:其作用是将位置指针移到离文件头50个字节处。
示例
#include<stdio.h>#include<string.h>int main(void){ FILE*stream; char msg[]="this is a test"; char buf[20]; if((stream=fopen("big_cat.txt","w+"))==NULL) { fprintf(stderr,"Can not open output file.\n"); return 0; } /*write some data to the file*/ fwrite(msg,strlen(msg)+1,1,stream); /*sizeof(char)=1 seek to the beginning of the file*/ fseek(stream,0,SEEK_SET); /*read the data and display it*/ fread(buf,strlen(msg)+1,1,stream); printf("%s\n",buf); fclose(stream); return 0;}
说明:这里fseek就是把stream指针定位到文件末尾
缓冲区强制物理写入:fflush()
说明:fwrite写完后,内容是放在缓冲区中,需要等Linux自动刷新到文件中,但是有时,Linux刷新没那么及时,会导致我们的数据没有真正写入到文件,从而发生一些异常,这时就要用到fflush()来把数据强行物理写入。
作用:fflush()用来清除读写缓冲区,需要立即把输出缓冲区的数据进行物理写入。
原型:int fflush(FILE *stream);
返回值:成功,返回0;失败,返回EOF(-1)。
示例:
#include <stdio.h>int main (){ FILE * pFile; char buffer[] = { 'x' , 'y' , 'z' }; pFile = fopen ( "tianger.txt" , "wb" ); fwrite (buffer , sizeof(buffer), 1 , pFile ); //写完后,内容暂时存在缓冲区 fflush(pFile); //强行写入物理文件 fclose (pFile); return 0;}
格式化字符:sprintf():
说明:sprintf()是字符串格式化命令,主要功能是把格式化的数据写入某个字符串中,它是一个可变参数函数。
原型:int sprintf(char buffer,char const format, …)
参数:
buffer:char型指针,指向将要写入的字符串的缓冲区。
format:格式化字符串。
[argument]…:可选参数,可以是任何类型的数据。
返回值:
返回写入buffer 的字符数,出错则返回-1. 如果 buffer 或 format 是空指针,且不出错而继续,函数将返回-1,并且 errno 会被设置为 EINVAL。
sprintf 返回被写入buffer 的字节数,结束字符‘\0’不计入内。即,如果“Hello”被写入空间足够大的buffer后,函数sprintf 返回5。
示例:
#include <stdio.h>int main( void ){ char buffer[200], s[] = "computer", c = 'l'; int i = 35, j; float fp = 1.7320534f; // 格式化并打印各种数据到buffer j = sprintf( buffer, " String: %s\n", s ); j += sprintf( buffer + j, " Character: %c\n", c ); j += sprintf( buffer + j, " Integer: %d\n", i ); j += sprintf( buffer + j, " Real: %f\n", fp ); printf( "Output:\n%s\ncharacter count = %d\n",buffer,j );}
输出:
String: computerCharacter: lInteger: 35Real: 1.732053character count = 74
标签: #c语言lseek