Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

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

NAME
       std::basic_filebuf::open	- std::basic_filebuf::open

Synopsis
	  basic_filebuf*  open(	 const	char*  s, std::ios_base::openmode mode
       (1)
	  );
	  basic_filebuf*       open(	   const       std::string&	  str,
       (2) (since C++11)
	  std::ios_base::openmode mode );
	  basic_filebuf*     open(     const	 std::filesystem::path&	    p,
       (3) (since C++17)
			       std::ios_base::openmode mode );
	  basic_filebuf*  open(	 const	std::filesystem::path::value_type*  s,
       (4) (since C++17)
			       std::ios_base::openmode mode );

	  If  the  associated  file was	already	open (is_open()	!= false), re-
       turns a null pointer
	  right	away.

	  Otherwise, opens the file with the given name	(s
	  , p.c_str()
	  (since  C++17)  or  str.c_str(),   depending	 on   the   overload).
       std::ios_base::openmode
	  values    may	   be	written	  as,	e.g.,	std::ios_base::out   |
       std::ios_base::app.

	  Overload (4) is only provided	 if  std::filesystem::path::value_type
       is  (since C++17)
	  not char.

	  The file is opened as	if by calling std::fopen with the second argu-
       ment (file access
	  mode)	determined by the result of mode & ~std::ios_base::ate as fol-
       lows, open()
	  fails	 if  the  result is not	some combination of flags shown	in the
       table:

	       mode & ~std::ios_base::ate	 std::fopen   Action  if  file
       Action if file
	  binary in out	trunc app noreplace	    access	already	exists
       does not	exist
				  (since C++23)	     mode
	  -	      +	      -	       -	 -	 -		   "r"
       Failure to
	  +	 +  -	-     -	  -		"rb"	       Read from start
       open
	  -	     +	    +	    -	      -	       -		  "r+"
       Error
	  +	 +  +	-     -	  -		"r+b"
	  -	 -  +	-     -	  -		"w"
	  -	 -  +	+     -	  -
	  +	  -   +	   -	 -   -		   "wb"		  Destroy con-
       tents Create new
	  +	 -  +	+     -	  -
	  -	 +  +	+     -	  -		"w+"
	  +	 +  +	+     -	  -		"w+b"
	  -	 -  +	-     -	  +		"wx"
	  -	 -  +	+     -	  +
	  +	 -  +	-     -	  +		"wbx"	       Failure to open
       Create new
	  +	 -  +	+     -	  +
	  -	 +  +	+     -	  +		"w+x"
	  +	 +  +	+     -	  +		"w+bx"
	  -	 -  +	-     +	  -		"a"
	  -	 -  -	-     +	  -
	  +	 -  +	-     +	  -		"ab"
	  +	 -  -	-     +	  -				Write  to  end
       Create new
	  -	 +  +	-     +	  -		"a+"
	  -	 +  -	-     +	  -
	  +	 +  +	-     +	  -		"a+b"
	  +	 +  -	-     +	  -

	  If  the  open	operation succeeds and (openmode & std::ios_base::ate)
       != 0 (the ate bit
	  is set), repositions the file	position to the	end of file, as	if  by
       calling
	  std::fseek(file, 0, SEEK_END), where file is the pointer returned by
       calling
	  std::fopen.  If the repositioning fails, calls close() and returns a
       null pointer to
	  indicate failure.

Parameters
	  s, str, p - the file name to open; s must point to a null-terminated
       string
	  openmode   -	the  file  opening  mode,   a	binary	 OR   of   the
       std::ios_base::openmode modes

Return value
	  this on success, a null pointer on failure.

Notes
	  open()  is  typically	 called	 through the constructor or the	open()
       member function of
	  std::basic_fstream.

Example
       // Run this code

	#include <fstream>
	#include <iostream>

	int main()
	{
	    std::string	filename = "Test.b";
	    std::filebuf fb;

	    // prepare a file to read
	    double d = 3.14;
	    if (!fb.open(filename, std::ios::binary | std::ios::out))
	    {
		std::cout  <<  "Open  file  "  <<  filename  <<	 "  for	 write
       failed\n";
		return 1;
	    }
	    fb.sputn(reinterpret_cast<char*>(&d), sizeof d);
	    fb.close();

	    // open file for reading
	    double d2 =	0.0;
	    if (!fb.open(filename, std::ios::binary | std::ios::in))
	    {
		std::cout << "Open file	" << filename << " for read failed\n";
		return 1;
	    }

	    auto got = fb.sgetn(reinterpret_cast<char*>(&d2), sizeof d2);
	    if (sizeof(d2) != got)
		std::cout << "Read of "	<< filename << " failed\n";
	    else
		std::cout << "Read back	from file: " <<	d2 << '\n';
	}

Output:
	Read back from file: 3.14

	  Defect reports

	  The following	behavior-changing defect reports were applied retroac-
       tively to
	  previously published C++ standards.

	    DR	  Applied to	       Behavior	as published		  Cor-
       rect behavior
	  LWG  596  C++98	open()	could not open files in	append	   can
       open in append mode
			     mode

See also
	  is_open checks if the	associated file	is open
		  (public member function)
	  close	  flushes the put area buffer and closes the associated	file
		  (public member function)

http://cppreference.com		  2024.06.10	   std::basic_filebuf::open(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::filebuf::open&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help