home | help
std::fsetpos(3) 	       C++ Standard Libary		 std::fsetpos(3)

NAME
     std::fsetpos - std::fsetpos

Synopsis
	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  func-
     tion 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.

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

Return value
	0 upon success, nonzero value otherwise. Also, sets errno on failure.

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  out-
     putting a
	multibyte sequence of a different length.

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

See also
	fgetpos gets the file position indicator
		(function)
	ftell	returns the current file position indicator
		(function)
	fseek	 moves	the  file position indicator to a specific location in a
     file
		(function)
	C documentation for
	fsetpos

http://cppreference.com 	   2024.06.10			 std::fsetpos(3)

home | help