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) |
Types and objects | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Functions | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
Defined in header <cstdio> | ||
int fsetpos(std::FILE* stream,conststd::fpos_t* pos); | ||
Sets the file position indicator and the multibyte parsing state (if any) for the C file streamstream
according to the value pointed to bypos
.
Besides establishing new parse state and position, a call to this function undoes the effects ofstd::ungetc and clears the end-of-file state, if it is set.
If a read or write error occurs, the error indicator (std::ferror) for the stream is set.
Contents |
stream | - | file stream to modify |
pos | - | pointer to afpos_t object obtained fromstd::fgetpos called on a stream associated with the same file |
0 upon success, nonzero value otherwise. Also, setserrno on failure.
After seeking to a non-end position in a wide stream, the next call to any output function may render the remainder of the file undefined, e.g. by outputting a multibyte sequence of a different length.
#include <cstdio>#include <cstdlib> int main(){// Prepare an array of floating-point values.constint SIZE=5;double A[SIZE]={1.,2.,3.,4.,5.};// Write array to a file.std::FILE* fp=std::fopen("test.bin","wb");std::fwrite(A, sizeof(double), SIZE, fp);std::fclose(fp); // Read the values into array B.double B[SIZE]; fp=std::fopen("test.bin","rb");std::fpos_t pos;if(std::fgetpos(fp,&pos)!=0)// current position: start of file{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);// read one value// current position: after reading one valuestd::printf("%.1f; read count = %d\n", B[0], ret_code);// print one value and ret_code if(std::fsetpos(fp,&pos)!=0)// reset current position to start of file{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);// re-read first valuestd::printf("%.1f; read count = %d\n", B[0], ret_code);// print one value and ret_codestd::fclose(fp); returnEXIT_SUCCESS;}
Output:
1.0; read count = 11.0; read count = 1
gets the file position indicator (function)[edit] | |
returns the current file position indicator (function)[edit] | |
moves the file position indicator to a specific location in a file (function)[edit] | |
C documentation forfsetpos |