fsetpos
提供: cppreference.com
<tbody>
</tbody>
| ヘッダ <stdio.h> で定義
|
||
int fsetpos( FILE *stream, const fpos_t *pos ); |
||
pos の指す値に従って、 C のファイルストリーム stream のファイル位置指示子およびマルチバイトパース状態 (もしあれば) を設定します。
新しいパース状態および位置の確立に加えて、この関数の呼び出しは ungetc の効果を取り消し、セットされていれば、ファイル終端ステータスをクリアします。
読み込みまたは書き込みエラーが発生した場合は、ストリームのエラー指示子 (ferror) がセットされます。
引数
| stream | - | 変更するファイルストリーム |
| pos | - | ファイル位置指示子の新しい値として使用するための fpos_t オブジェクトを指すポインタ |
戻り値
成功した場合は 0、そうでなければ非ゼロの値。 失敗した場合は errno も設定します。
ノート
ワイドストリームで非終端位置にシークした後の、次の任意の出力関数の呼び出しは、例えば異なる長さのマルチバイトシーケンスを出力することによって、ファイルの残りを未定義の状態にします。
例
fsetpos をエラーチェック付きで使用します。
Run this code
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
/* Prepare an array of f-p values. */
#define SIZE 5
double A[SIZE] = {1.,2.,3.,4.,5.};
/* Write array to a file. */
FILE * fp = fopen("test.bin", "wb");
fwrite(A,sizeof(double),SIZE,fp);
fclose (fp);
/* Read the f-p values into array B. */
double B[SIZE];
fp = fopen("test.bin","rb");
fpos_t pos;
if (fgetpos(fp,&pos) != 0) /* current position: start of file */
{
perror("fgetpos()");
fprintf(stderr,"fgetpos() failed in file %s at line # %d\n", __FILE__,__LINE__-3);
exit(EXIT_FAILURE);
}
int ret_code = fread(B,sizeof(double),1,fp); /* read one f-p value */
/* current position: after reading one f-p value */
printf("%.1f\n", B[0]); /* print one f-p value */
if (fsetpos(fp,&pos) != 0) /* reset current position to start of file */
{
if (ferror(fp))
{
perror("fsetpos()");
fprintf(stderr,"fsetpos() failed in file %s at line # %d\n", __FILE__,__LINE__-5);
exit(EXIT_FAILURE);
}
}
ret_code = fread(B,sizeof(double),1,fp); /* reread first f-p value */
printf("%.1f\n", B[0]); /* print one f-p value */
fclose(fp);
return EXIT_SUCCESS;
}
出力:
1.0
1.0
参考文献
- C11 standard (ISO/IEC 9899:2011):
- 7.21.9.3 The fsetpos function (p: 337)