命名空间
变体
操作

std::errc

来自 cppreference.cn
< cpp‎ | error
 
 
 
 
 
定义于头文件 <system_error>
enum class errc;
(自 C++11 起)

作用域枚举 std::errc 定义了与 POSIX 错误代码对应的可移植错误条件的值。

内容

[编辑] 成员常量

名称 等效 POSIX 错误
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 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 (已弃用)
ENODATA no_message
ENOMSG no_protocol_option
ENOPROTOOPT no_space_on_device
ENOSPC no_stream_resources (已弃用)
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 (已弃用)
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 (已弃用)
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

errc 枚举 e 创建错误代码值
(函数) [编辑]
errce 创建错误条件
(函数) [编辑]

[编辑] 辅助类

扩展类型特征 std::is_error_condition_enum 以将 errc 值标识为错误条件
(函数模板) [编辑]

[编辑] 示例

#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");
}

可能的输出

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)

[编辑] 缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。

DR 应用于 已发布行为 正确行为
LWG 3869 C++11 成员常量 no_message_available
no_stream_resourcesnot_a_streamstream_timeout
引用了过时的 POSIX STREAMS API[1]
已弃用它们
  1. 虽然相应的 POSIX 错误编号 ENODATA、ENOSR、ENOSTR 和 ETIME 在 POSIX 2017 中被标记为“过时”,但 STREAMS API 是可选的,并且不是先前 POSIX 标准一致性所必需的(因为流行的类 Unix 系统拒绝实现它)。

[编辑] 参见

持有平台相关的错误代码
(类) [编辑]
持有可移植的错误代码
(类) [编辑]