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

FreeBSD Manual Pages

  
 
  

home | help
std::filesy...::equivalent(3) C++ Standard Libarystd::filesy...::equivalent(3)

NAME
       std::filesystem::equivalent - std::filesystem::equivalent

Synopsis
	  Defined in header <filesystem>
	  bool equivalent( const std::filesystem::path&	p1,

	  const	std::filesystem::path& p2 );
	  bool equivalent( const std::filesystem::path&	p1,  (since C++17)
	  const	std::filesystem::path& p2,

	  std::error_code& ec )	noexcept;

	  Checks  whether  the paths p1	and p2 resolve to the same file	system
       entity.

	  If either p1 or p2 does not exist, an	error is reported.

	  The non-throwing overload returns false on errors.

Parameters
	  p1, p2 - paths to check for equivalence
	  ec	 - out-parameter for error reporting in	the non-throwing over-
       load

Return value
	  true if the p1 and p2	refer to the same file or directory and	 their
       file status is
	  the same. false otherwise.

Exceptions
	  The overload that does not take a std::error_code& parameter throws
	  filesystem::filesystem_error	on  underlying	OS  API	 errors,  con-
       structed	with p1	as the
	  first	path argument, p2 as the second	path argument, and the OS  er-
       ror code	as the
	  error	 code argument.	The overload taking a std::error_code& parame-
       ter sets	it to the
	  OS API error code if an OS API call fails, and  executes  ec.clear()
       if no errors
	  occur.  Any overload not marked noexcept may throw std::bad_alloc if
       memory
	  allocation fails.

Notes
	  Two paths are	considered to resolve to the same file	system	entity
       if the two
	  candidate  entities the paths	resolve	to are located on the same de-
       vice at the same
	  location. For	POSIX, this means that the st_dev and  st_ino  members
       of their	POSIX
	  stat structure, obtained as if by POSIX stat(), are equal.

	  In  particular,  all	hard  links for	the same file or directory are
       equivalent, and a
	  symlink and its target on the	same file system are equivalent.

Example
       // Run this code

	#include <iostream>
	#include <cstdint>
	#include <filesystem>
	namespace fs = std::filesystem;
	int main()
	{
	    // hard link equivalency
	    fs::path p1	= ".";
	    fs::path p2	= fs::current_path();
	    if(fs::equivalent(p1, p2))
		std::cout << p1	<< " is	equivalent to "	<< p2 << '\n';

	    // symlink equivalency
	    for(const fs::path lib  :  {"/lib/libc.so.6",  "/lib/x86_64-linux-
       gnu/libc.so.6"})	{
		try {
		  p2 = lib.parent_path() / fs::read_symlink(lib);
		} catch(std::filesystem::filesystem_error const& ex) {
		    std::cout << ex.what() << '\n';
		    continue;
		}
		if(fs::equivalent(lib, p2))
		    std::cout << lib <<	" is equivalent	to " <<	p2 << '\n';
	    }
	}

Possible output:
	"." is equivalent to "/var/tmp/test"
	filesystem   error:   read_symlink:   No   such	  file	 or  directory
       [/lib/libc.so.6]
	"/lib/x86_64-linux-gnu/libc.so.6" is equivalent	to "/lib/x86_64-linux-
       gnu/libc-2.23.so"

	 Defect	reports

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

	     DR	   Applied to	      Behavior	as  published	       Correct
       behavior
	  LWG 2937 C++17      error condition specified	incorrectly corrected

See also
	  compare	  compares  the	 lexical  representations of two paths
       lexicographically
			 (public member	function of std::filesystem::path)
	  operator==
	  operator!=
	  operator<
	  operator<=
	  operator>
	  operator>=	 lexicographically compares two	paths
	  operator<=>	 (function)
	  (until C++20)
	  (until C++20)
	  (until C++20)
	  (until C++20)
	  (until C++20)
	  (C++20)
	  status	 determines file attributes
	  symlink_status determines file attributes, checking the symlink tar-
       get
	  (C++17)	 (function)
	  (C++17)

http://cppreference.com		  2022.07.31	 std::filesy...::equivalent(3)

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

home | help