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

NAME
     std::errc - std::errc

Synopsis
	Defined in header <system_error>
	enum class errc;		  (since C++11)

	The  scoped  enumeration  std::errc defines the values of portable error
     conditions
	that correspond to the POSIX error codes.

Member constants
	Constant			   Equivalent POSIX Error
	address_family_not_supported	   EAFNOSUPPORT
	address_in_use			   EADDRINUSE
	address_not_available		   EADDRNOTAVAIL
	already_connected		   EISCONN
	argument_list_too_long		   E2BIG
	argument_out_of_domain		   EDOM
	bad_address			   EFAULT
	bad_file_descriptor		   EBADF
	bad_message			   EBADMSG
	broken_pipe			   EPIPE
	connection_aborted		   ECONNABORTED
	connection_already_in_progress	   EALREADY
	connection_refused		   ECONNREFUSED
	connection_reset		   ECONNRESET
	cross_device_link		   EXDEV
	destination_address_required	   EDESTADDRREQ
	device_or_resource_busy 	   EBUSY
	directory_not_empty		   ENOTEMPTY
	executable_format_error 	   ENOEXEC
	file_exists			   EEXIST
	file_too_large			   EFBIG
	filename_too_long		   ENAMETOOLONG
	function_not_supported		   ENOSYS
	host_unreachable		   EHOSTUNREACH
	identifier_removed		   EIDRM
	illegal_byte_sequence		   EILSEQ
	inappropriate_io_control_operation ENOTTY
	interrupted			   EINTR
	invalid_argument		   EINVAL
	invalid_seek			   ESPIPE
	io_error			   EIO
	is_a_directory			   EISDIR
	message_size			   EMSGSIZE
	network_down			   ENETDOWN
	network_reset			   ENETRESET
	network_unreachable		   ENETUNREACH
	no_buffer_space 		   ENOBUFS
	no_child_process		   ECHILD
	no_link 			   ENOLINK
	no_lock_available		   ENOLCK
	no_message_available (deprecated)  ENODATA
	no_message			   ENOMSG
	no_protocol_option		   ENOPROTOOPT
	no_space_on_device		   ENOSPC
	no_stream_resources (deprecated)   ENOSR
	no_such_device_or_address	   ENXIO
	no_such_device			   ENODEV
	no_such_file_or_directory	   ENOENT
	no_such_process 		   ESRCH
	not_a_directory 		   ENOTDIR
	not_a_socket			   ENOTSOCK
	not_a_stream (deprecated)	   ENOSTR
	not_connected			   ENOTCONN
	not_enough_memory		   ENOMEM
	not_supported			   ENOTSUP
	operation_canceled		   ECANCELED
	operation_in_progress		   EINPROGRESS
	operation_not_permitted 	   EPERM
	operation_not_supported 	   EOPNOTSUPP
	operation_would_block		   EWOULDBLOCK
	owner_dead			   EOWNERDEAD
	permission_denied		   EACCES
	protocol_error			   EPROTO
	protocol_not_supported		   EPROTONOSUPPORT
	read_only_file_system		   EROFS
	resource_deadlock_would_occur	   EDEADLK
	resource_unavailable_try_again	   EAGAIN
	result_out_of_range		   ERANGE
	state_not_recoverable		   ENOTRECOVERABLE
	stream_timeout (deprecated)	   ETIME
	text_file_busy			   ETXTBSY
	timed_out			   ETIMEDOUT
	too_many_files_open_in_system	   ENFILE
	too_many_files_open		   EMFILE
	too_many_links			   EMLINK
	too_many_symbolic_link_levels	   ELOOP
	value_too_large 		   EOVERFLOW
	wrong_protocol_type		   EPROTOTYPE

Non-member functions
	make_error_code(std::errc)	creates error code value for errc enum e
	(C++11) 			(function)
	make_error_condition(std::errc) creates an error condition for	an  errc
     value e
	(C++11) 			(function)

Helper classes
					   extends the type trait
	is_error_condition_enum<std::errc> std::is_error_condition_enum to iden-
     tify errc
	(C++11) 			   values as error conditions
					   (function template)

Example
     // Run this code

      #include <filesystem>
      #include <fstream>
      #include <iomanip>
      #include <iostream>
      #include <string>
      #include <system_error>
      #include <thread>

      void print_error(const std::string& details, std::error_code error_code)
      {
	  std::string value_name;
	  if (error_code == std::errc::invalid_argument)
	      value_name = "std::errc::invalid_argument";
	  if (error_code == std::errc::no_such_file_or_directory)
	      value_name = "std::errc::no_such_file_or_directory";
	  if (error_code == std::errc::is_a_directory)
	      value_name = "std::errc::is_a_directory";
	  if (error_code == std::errc::permission_denied)
	      value_name = "std::errc::permission_denied";

	  std::cout << details << ":\n	"
		    << std::quoted(error_code.message())
		    << " (" << value_name << ")\n\n";
      }

      void print_errno(const std::string& details, int errno_value = errno)
      {
	  print_error(details, std::make_error_code(std::errc(errno_value)));
      }

      int main()
      {
	  std::cout << "Detaching a not-a-thread...\n";
	  try
	  {
	      std::thread().detach();
	  }
	  catch (const std::system_error& e)
	  {
	      print_error("Error detaching empty thread", e.code());
	  }

	  std::cout << "Opening nonexistent file...\n";
	  std::ifstream nofile{"nonexistent-file"};
	  if (!nofile.is_open())
	      print_errno("Error opening nonexistent file for reading");

	  std::cout << "Reading from directory as a file...\n";
	  std::filesystem::create_directory("dir");
	  std::ifstream dir_stream{"dir"};
	  [[maybe_unused]] char c = dir_stream.get();
	  if (!dir_stream.good())
	      print_errno("Error reading data from directory");

	  std::cout << "Open read-only file for writing...\n";
	  std::fstream{"readonly-file", std::ios::out};
	  std::filesystem::permissions("readonly-file", 	   std::filesys-
     tem::perms::owner_read);
	  std::fstream write_readonly("readonly-file", std::ios::out);
	  if (!write_readonly.is_open())
	      print_errno("Error opening read-only file for writing");
      }

Possible output:
      Detaching a not-a-thread...
      Error detaching empty thread:
	"Invalid argument" (std::errc::invalid_argument)

      Opening nonexistent file...
      Error opening nonexistent file for reading:
	"No such file or directory" (std::errc::no_such_file_or_directory)

      Reading from directory as a file...
      Error reading data from directory:
	"Is a directory" (std::errc::is_a_directory)

      Open read-only file for writing...
      Error opening read-only file for writing:
	"Permission denied" (std::errc::permission_denied)

	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
			    the member constants no_message_available,
	LWG 3869 C++11	    no_stream_resources, not_a_stream and	    dep-
     recated them
			    stream_timeout
			    referred to the obsolete POSIX STREAMS API^[1]

	 1.  a	Although  the  corresponding POSIX error numbers ENODATA, ENOSR,
     ENOSTR and
	    ETIME were marked "obsolescent" in POSIX 2017, the STREAMS	API  was
     optional and
	    not required for conformance to the previous POSIX standard (because
     popular
	    unix-like systems refused to implement it).

See also
	error_code	holds a platform-dependent error code
	(C++11) 	(class)
	error_condition holds a portable error code
	(C++11) 	(class)

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

home | help