Namespaces
Variants
Actions

std::fsetpos

From cppreference.com
< cpp‎ | io‎ | c
 
 
 
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)    
 
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.

[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

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 for fsetpos
Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/io/c/fsetpos&oldid=127258"

AltStyle によって変換されたページ (->オリジナル) /