函數(shù)原型:int fsetpos(FILE *fp, const fpos_t *pos);
頭文件:#include<stdio.h>
是否是標準函數(shù):是
函數(shù)功能:將文件指針定位在pos指定的位置上竭缝。該函數(shù)的功能與前面提到的fgetpos相反房维,是將文件指針fp按照pos指定的位置在文件中定位。pos值以內(nèi)部格式存儲,僅由fgetpos和fsetpos使用抬纸。
返回值:成功返回0咙俩,否則返回非0。
例程如下 應(yīng)用fsetpos函數(shù)定位文件指針湿故。
#include <stdio.h>
void main( void )
{
FILE *fp;
fpos_t pos;
char buffer[50];
if( (fp = fopen( "test.txt", "rb" )) == NULL )
printf( "Trouble opening file/n" );
else
{
pos = 10;
if( fsetpos( fp, &pos ) != 0 )
perror( "fsetpos error" );
else
{
fread( buffer, sizeof( char ), 16, fp );
printf( "16 bytes at byte %ld: %.16s/n", pos, buffer );
}
}
fclose( fp );
}
例程說明:
(1)首先暴浦,程序以只讀方式打開名為test.txt的文件。在這里晓锻,test.txt文件中已存入字符串This is a test for testing the function of fsetpos.
(2)將pos設(shè)置為10。應(yīng)用fsetpos函數(shù)將文件指針fp按照pos指定的位置在文件中定位飞几。這樣文件指針fp指向字符串中test的字母t砚哆。
(3)再從新定位的文件指針開始讀取16個字符到buffer緩沖區(qū),也就是說讀取字符串"test for testing"到緩沖區(qū)buffer屑墨。
(4)最后顯示結(jié)果:16 bytes at byte 10: test for testing 躁锁。
fgetpos:取得當(dāng)前文件的句柄函數(shù)
函數(shù)原型:int fgetpos( FILE *stream, fpos_t *pos );
頭文件:#include<stdio.h>
是否是標準函數(shù):是
函數(shù)功能:取得當(dāng)前文件的指針所指的位置,并把該指針所指的位置數(shù)存放到pos所指的對象中卵史。pos值以內(nèi)部格式存儲,僅由fgetpos和fsetpos使用战转。其中fsetpos的功能與fgetpos相反,為了詳細介紹以躯,將在后節(jié)給與說明槐秧。
返回值:成功返回0,失敗返回非0忧设,并設(shè)置errno刁标。
例程如下:應(yīng)用fgetpos函數(shù)取得當(dāng)前文件的指針所指的位置。
#include <string.h>
#include <stdio.h>
int main(void)
{
FILE *fp;
char string[] = "This is a test";
fpos_t pos;
fp = fopen("test.txt", "w+");
fwrite(string, strlen(string), 1, fp);
fgetpos(fp, &pos);
printf("The file pointer is at byte %ld/n", pos);
fseek(fp,3,0);
fgetpos(fp, &pos);
printf("The file pointer is at byte %ld/n", pos);
fclose(fp);
return 0;
}
例程說明:
(1)首先址晕,程序以讀寫方式打開一個名為test.txt的文件膀懈,并把字符串"This is a test"寫入文件。注意:字符串共14個字節(jié)谨垃,地址為0~13启搂。用fwrite函數(shù)寫入后硼控,文件指針自動指向文件最后一個字節(jié)的下一個位置。即這時的fp的值應(yīng)該是14胳赌。
(2)再用fgetpos函數(shù)取得指針位置并存入&pos所指向的對象牢撼,此時, pos中的內(nèi)容為14匈织。然后在屏幕上顯示出The file pointer is at byte 14浪默。
(3)再用fseek函數(shù)重設(shè)文件指針的位置,讓fp的值為3缀匕,即指向文件中第4個字節(jié)纳决。
再次取得指針位置并存入&pos所指向的對象。然后在屏幕上顯示出The file pointer is at byte 3乡小。