std::errc
From cppreference.com
C++
Feature test macros (C++20)
Concepts library (C++20)
Metaprogramming library (C++11)
Ranges library (C++20)
Filesystem library (C++17)
Concurrency support library (C++11)
Execution control library (C++26)
Utilities library
Relational operators (deprecated in C++20)
Integer comparison functions
Swap and type operations
Common vocabulary types
Type support (basic types, RTTI)
Library feature-test macros (C++20)
(C++11)
(C++20)
(C++26)
(C++20)
Coroutine support (C++20)
Contract support (C++26)
(C++20)(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)(C++20)(C++20)
(C++20)(C++20)(C++20)
General utilities
(C++20)(C++20)(C++20)
(C++20)(C++20)(C++20)
(C++20)
Diagnostics library
(until C++20*)
(C++17)(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Exception handling failures
(C++11)
(until C++17*)
(until C++17*)
(until C++17*)
(until C++17*)
(TM TS)
(C++11)
(C++11)
(C++11)
(C++11)
errc
(C++11)
(C++11)
(C++11)
(C++23)
(C++23)
(C++26)
(C++26)
(C++26)
std::errc
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.
Contents
[edit] Member constants
Name
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
[edit] Non-member functions
[edit] Helper classes
extends the type trait std::is_error_condition_enum to identify
(function template) [edit]
errc
values as error conditions (function template) [edit]
[edit] 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::filesystem::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)
[edit] Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 3869 | C++11 | the member constants no_message_available ,no_stream_resources , not_a_stream and stream_timeout referred to the obsolete POSIX STREAMS API[1] |
deprecated them |
- ↑ 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).