- cstdio[meta header]
- std[meta namespace]
- function[meta id-type]
namespace std {
int fsetpos(FILE* stream, const fpos_t* pos);
}ファイルの現在位置を設定する。
正常に実行されれば0を返す。
失敗した場合は、0以外を返し、エラーの内容はerrnoから参照することができる。
かつてはfseekで位置を指定していたが、fseekは位置をlong intで指定するため、非常に大きなファイルやマルチバイト文字を含む特殊なファイルでは正確にファイル位置を指定できないことがあった。
そこで、どのようなファイルでも位置を正確に表現できるfpos_t型が導入されたことに伴い、この関数が登場した。
#include <iostream>
#include <cstdio>
int main() {
std::FILE *file = std::fopen("example.txt", "w");
if (file == nullptr) {
std::perror("Failed to open file");
return 1;
}
std::fpos_t current_pos;
std::fgetpos(file, ¤t_pos);
std::fputs("Hello, World!\n", file);
std::fsetpos(file, ¤t_pos);
std::fputs("h", file);
std::fclose(file);
file = std::fopen("example.txt", "r");
if (file == nullptr) {
std::perror("Failed to open file");
return 1;
}
int ch;
while ((ch = std::fgetc(file)) != EOF) {
std::putchar(ch);
}
std::fclose(file);
return 0;
}- std::fsetpos[color ff0000]
- std::fgetpos[link /reference/cstdio/fgetpos.md]
- std::fopen[link /reference/cstdio/fopen.md]
- std::fputs[link /reference/cstdio/fputs.md]
- std::fclose[link /reference/cstdio/fclose.md]
- std::perror[link /reference/cstdio/perror.md.nolink]
- std::fgetc[link /reference/cstdio/fgetc.md]
- std::putchar[link /reference/cstdio/putchar.md]
hello, World!
- Clang: ??
- GCC: ??
- Visual C++: ??