cppreference的std::errc: std::errc - cppreference.com
对应定义(come from: 2022\Community\VC\Tools\MSVC\14.33.31629\include\xerrc.h)
- enum class errc { // names for generic error codes
- address_family_not_supported = 102, // EAFNOSUPPORT
- address_in_use = 100, // EADDRINUSE
- address_not_available = 101, // EADDRNOTAVAIL
- already_connected = 113, // EISCONN
- argument_list_too_long = 7, // E2BIG
- argument_out_of_domain = 33, // EDOM
- bad_address = 14, // EFAULT
- bad_file_descriptor = 9, // EBADF
- bad_message = 104, // EBADMSG
- broken_pipe = 32, // EPIPE
- connection_aborted = 106, // ECONNABORTED
- connection_already_in_progress = 103, // EALREADY
- connection_refused = 107, // ECONNREFUSED
- connection_reset = 108, // ECONNRESET
- cross_device_link = 18, // EXDEV
- destination_address_required = 109, // EDESTADDRREQ
- device_or_resource_busy = 16, // EBUSY
- directory_not_empty = 41, // ENOTEMPTY
- executable_format_error = 8, // ENOEXEC
- file_exists = 17, // EEXIST
- file_too_large = 27, // EFBIG
- filename_too_long = 38, // ENAMETOOLONG
- function_not_supported = 40, // ENOSYS
- host_unreachable = 110, // EHOSTUNREACH
- identifier_removed = 111, // EIDRM
- illegal_byte_sequence = 42, // EILSEQ
- inappropriate_io_control_operation = 25, // ENOTTY
- interrupted = 4, // EINTR
- invalid_argument = 22, // EINVAL
- invalid_seek = 29, // ESPIPE
- io_error = 5, // EIO
- is_a_directory = 21, // EISDIR
- message_size = 115, // EMSGSIZE
- network_down = 116, // ENETDOWN
- network_reset = 117, // ENETRESET
- network_unreachable = 118, // ENETUNREACH
- no_buffer_space = 119, // ENOBUFS
- no_child_process = 10, // ECHILD
- no_link = 121, // ENOLINK
- no_lock_available = 39, // ENOLCK
- no_message_available = 120, // ENODATA
- no_message = 122, // ENOMSG
- no_protocol_option = 123, // ENOPROTOOPT
- no_space_on_device = 28, // ENOSPC
- no_stream_resources = 124, // ENOSR
- no_such_device_or_address = 6, // ENXIO
- no_such_device = 19, // ENODEV
- no_such_file_or_directory = 2, // ENOENT
- no_such_process = 3, // ESRCH
- not_a_directory = 20, // ENOTDIR
- not_a_socket = 128, // ENOTSOCK
- not_a_stream = 125, // ENOSTR
- not_connected = 126, // ENOTCONN
- not_enough_memory = 12, // ENOMEM
- not_supported = 129, // ENOTSUP
- operation_canceled = 105, // ECANCELED
- operation_in_progress = 112, // EINPROGRESS
- operation_not_permitted = 1, // EPERM
- operation_not_supported = 130, // EOPNOTSUPP
- operation_would_block = 140, // EWOULDBLOCK
- owner_dead = 133, // EOWNERDEAD
- permission_denied = 13, // EACCES
- protocol_error = 134, // EPROTO
- protocol_not_supported = 135, // EPROTONOSUPPORT
- read_only_file_system = 30, // EROFS
- resource_deadlock_would_occur = 36, // EDEADLK
- resource_unavailable_try_again = 11, // EAGAIN
- result_out_of_range = 34, // ERANGE
- state_not_recoverable = 127, // ENOTRECOVERABLE
- stream_timeout = 137, // ETIME
- text_file_busy = 139, // ETXTBSY
- timed_out = 138, // ETIMEDOUT
- too_many_files_open_in_system = 23, // ENFILE
- too_many_files_open = 24, // EMFILE
- too_many_links = 31, // EMLINK
- too_many_symbolic_link_levels = 114, // ELOOP
- value_too_large = 132, // EOVERFLOW
- wrong_protocol_type = 136 // EPROTOTYPE
- };
示例代码:
- 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 << "), " << error_code
- << " \n";
- }
-
- void print_errno(const std::string& details, int errno_value = errno)
- {
- print_error(details, std::make_error_code(std::errc(errno_value)));
- }
-
- void testMain()
- {
- // Detaching a not-a-thread
- try
- {
- std::thread().detach();
- }
- catch (const std::system_error& e)
- {
- print_error("Error detaching empty thread", e.code());
- }
-
- // Opening nonexistent file
- {
- std::ifstream nofile("nonexistent-file");
- if (!nofile.is_open())
- {
- print_errno("Error opening nonexistent file for reading");
- }
- }
-
- // Reading from directory as a file
- {
- std::filesystem::create_directory("testDir");
- std::ifstream dir_stream("testDir");
- [[maybe_unused]] char c = dir_stream.get();
- if (!dir_stream.good())
- {
- print_errno("Error reading data from directory");
- }
- }
-
- // Open readonly file for writing
- {
- {
- std::fstream new_file("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 readonly file for writing");
- }
- }
- }
运行程序之后的输出:
- Error detaching empty thread:
- "invalid argument" (std::errc::invalid_argument), generic:22
- Error opening nonexistent file for reading:
- "no such file or directory" (std::errc::no_such_file_or_directory), generic:2
- Error reading data from directory:
- "permission denied" (std::errc::permission_denied), generic:13
- Error opening readonly file for writing:
- "permission denied" (std::errc::permission_denied), generic:13