std:: fsetpos
From cppreference.net
C++
Input/output library
| I/O manipulators | ||||
| Print functions (C++23) | ||||
| C-style I/O | ||||
| Buffers | ||||
|
(C++23)
|
||||
|
(
C++98/26*
)
|
||||
|
(C++20)
|
||||
| Streams | ||||
| Abstractions | ||||
| File I/O | ||||
| String I/O | ||||
| Array I/O | ||||
|
(C++23)
|
||||
|
(C++23)
|
||||
|
(C++23)
|
||||
|
(
C++98/26*
)
|
||||
|
(
C++98/26*
)
|
||||
|
(
C++98/26*
)
|
||||
| Synchronized Output | ||||
|
(C++20)
|
||||
| Types | ||||
| Error category interface | ||||
|
(C++11)
|
||||
|
(C++11)
|
C-style I/O
| Types and objects | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Functions | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ヘッダーで定義
<cstdio>
|
||
|
int
fsetpos
(
std::
FILE
*
stream,
const
std::
fpos_t
*
pos
)
;
|
||
Cファイルストリーム
stream
のファイル位置指示子とマルチバイト解析状態(存在する場合)を、
pos
が指す値に従って設定します。
新しい解析状態と位置を確立する他に、この関数の呼び出しは std::ungetc の効果を元に戻し、設定されている場合はend-of-file状態をクリアします。
読み取りまたは書き込みエラーが発生した場合、ストリームのエラーインジケータ( std::ferror )が設定されます。
目次 |
パラメータ
| stream | - | 変更するファイルストリーム |
| pos | - | 同じファイルに関連付けられたストリームで std::fgetpos を呼び出して取得した fpos_t オブジェクトへのポインタ |
戻り値
0 成功時は0、それ以外の場合は非ゼロの値を返します。また、失敗時には errno を設定します。
注記
ワイドストリームで非終端位置にシークした後、任意の出力関数を次に呼び出すと、例えば異なる長さのマルチバイトシーケンスを出力することによって、ファイルの残りの部分が未定義状態になる可能性があります。
例
このコードを実行
#include <cstdio> #include <cstdlib> int main() { // 浮動小数点値の配列を準備 const int SIZE = 5; double A[SIZE] = {1., 2., 3., 4., 5.}; // 配列をファイルに書き込み std::FILE * fp = std::fopen("test.bin", "wb"); std::fwrite(A, sizeof(double), SIZE, fp); std::fclose(fp); // 値を配列Bに読み込み double B[SIZE]; fp = std::fopen("test.bin", "rb"); std::fpos_t pos; if (std::fgetpos(fp, &pos) != 0) // 現在位置: ファイル先頭 { std::perror("fgetpos()"); std::fprintf(stderr, "fgetpos() failed in file %s at line # %d\n", __FILE__, __LINE__-3); std::exit(EXIT_FAILURE); } int ret_code = std::fread(B, sizeof(double), 1, fp); // 1つの値を読み込み // 現在位置: 1つの値を読み込んだ後 std::printf("%.1f; read count = %d\n", B[0], ret_code); // 1つの値とret_codeを表示 if (std::fsetpos(fp, &pos) != 0) // 現在位置をファイル先頭にリセット { if (std::ferror(fp)) { std::perror("fsetpos()"); std::fprintf(stderr, "fsetpos() failed in file %s at line # %d\n", __FILE__, __LINE__-5); std::exit(EXIT_FAILURE); } } ret_code = std::fread(B, sizeof(double), 1, fp); // 最初の値を再読み込み std::printf("%.1f; read count = %d\n", B[0], ret_code); // 1つの値とret_codeを表示 std::fclose(fp); return EXIT_SUCCESS; }
出力:
1.0; read count = 1 1.0; read count = 1
関連項目
|
ファイル位置指示子を取得する
(関数) |
|
|
現在のファイル位置指示子を返す
(関数) |
|
|
ファイル位置指示子をファイル内の特定の位置に移動する
(関数) |
|
|
Cドキュメント
for
fsetpos
|
|