fsetpos
|
ヘッダーで定義
<stdio.h>
|
||
ファイルストリーム stream のファイル位置指示子とマルチバイト解析状態(存在する場合)を、 pos が指す値に従って設定します。
新しい解析状態と位置を確立する他に、この関数の呼び出しは ungetc の効果を元に戻し、設定されている場合はファイル終端状態をクリアします。
読み取りまたは書き込みエラーが発生した場合、ストリームのエラーインジケータ( ferror )が設定されます。
目次 |
パラメータ
| stream | - | 変更するファイルストリーム |
| pos | - | ファイル位置指示子の新しい値として使用する fpos_t オブジェクトへのポインタ |
戻り値
0 成功時は0、それ以外の場合は非ゼロの値。
注記
ワイドストリームで非終端位置にシークした後、任意の出力関数を次に呼び出すと、例えば異なる長さのマルチバイトシーケンスを出力することによって、ファイルの残りの部分が未定義状態になる可能性があります。
例
fsetpos
のエラーチェック付き使用例
#include <stdio.h> #include <stdlib.h> int main(void) { // FP(浮動小数点)値の配列を準備 #define SIZE 5 double A[SIZE] = {1.0, 2.0, 3.0, 4.0, 5.0}; // 配列をファイルに書き込み FILE * fp = fopen("test.bin", "wb"); fwrite(A,sizeof(double),SIZE,fp); fclose (fp); // FP値を配列Bに読み込み double B[SIZE]; fp = fopen("test.bin","rb"); fpos_t pos; if (fgetpos(fp, &pos)) // 現在位置:ファイル先頭 { 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); // 1つのFP値を読み込み // 現在位置:1つの浮動小数点値を読み込んだ後 printf("%.1f; read count = %d\n", B[0], ret_code); // 1つのFP値とret_codeを表示 if (fsetpos(fp, &pos)) // 現在位置をファイル先頭にリセット { 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); // 最初のFP値を再読み込み printf("%.1f; read count = %d\n", B[0], ret_code); // 1つのFP値とret_codeを表示 fclose(fp); return EXIT_SUCCESS; }
出力例:
1.0; read count = 1 1.0; read count = 1
参考文献
- C23規格 (ISO/IEC 9899:2024):
-
- 7.21.9.3 fsetpos関数 (p: TBD)
- C17規格 (ISO/IEC 9899:2018):
-
- 7.21.9.3 fsetpos関数 (p: TBD)
- C11規格 (ISO/IEC 9899:2011):
-
- 7.21.9.3 fsetpos関数 (p: 337)
- C99規格 (ISO/IEC 9899:1999):
-
- 7.19.9.3 fsetpos関数 (p: 303)
- C89/C90規格 (ISO/IEC 9899:1990):
-
- 4.9.9.3 fsetpos関数
関連項目
|
ファイル位置指示子を取得する
(関数) |
|
|
現在のファイル位置指示子を返す
(関数) |
|
|
ファイル位置指示子をファイル内の特定の位置に移動する
(関数) |
|
|
C++ documentation
for
fsetpos
|
|