std::fsetpos
From cppreference.com
 
 
 
 
 
 C++ 
 Feature test macros (C++20)
 Concepts library (C++20)
 Metaprogramming library (C++11)
 Ranges library (C++20)
 Filesystem library (C++17)
 Concurrency support library (C++11)
 Execution control library (C++26)
Input/output library 
 
 
 
 
 
 
 
 
 
 
 
 
 Print functions (C++23)
 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
 File access
 Direct input/output
 Unformatted input/output
 Formatted input
(C++11)(C++11)(C++11)    
(C++11)(C++11)(C++11)    
 Formatted output
(C++11)
(C++11)    
 File positioning
fsetpos
 Error handling
 Operations on files
Defined in header 
 
 
<cstdio> 
 int fsetpos( std::FILE * stream, const std::fpos_t * pos );
 
 
Sets the file position indicator and the multibyte parsing state (if any) for the C file stream stream according to the value pointed to by pos. 
Besides establishing new parse state and position, a call to this function undoes the effects of std::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
[edit] Parameters
 stream
 -
 file stream to modify
 pos
 -
 pointer to a fpos_t object obtained from std::fgetpos  called on a stream associated with the same file
[edit] Return value
0 upon success, nonzero value otherwise. Also, sets errno on failure.
[edit] Notes
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.
[edit] Example
Run this code
#include <cstdio> #include <cstdlib> int main() { // Prepare an array of floating-point values. const int 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 value std::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 value std::printf ("%.1f; read count = %d\n", B[0], ret_code); // print one value and ret_code std::fclose (fp); return EXIT_SUCCESS ; }
Output:
1.0; read count = 1 1.0; read count = 1
[edit] See also
C documentation  for fsetpos