Namespaces
Variants

std:: errc

From cppreference.net
Utilities library
std::errc
定義済みヘッダー <system_error>
enum class errc ;
(C++11以降)

scoped enumeration std::errc は、POSIXエラーコードに対応する移植可能なエラー条件の値を定義します。

目次

メンバー定数

(注:HTMLタグ内のテキストはC++の専門用語であり、翻訳対象外のため原文のまま保持されています) (注:指定された条件により、HTMLタグ内のテキストはすべてC++関連のコードおよび定数名であるため、翻訳対象外となりました。connection_resetとECONNRESETはC++固有の用語として原文のまま保持されています) **説明:** - HTMLタグと属性はそのまま保持されています - ` `タグ内のテキストは翻訳されていません - `cross_device_link` と `EXDEV` はC++の特定の用語/定数として翻訳対象外です - 元のフォーマットと構造が完全に保持されています **翻訳結果:** **説明:** - HTMLタグと属性はすべて保持されています - ` `タグ内のテキストは翻訳対象外として保持されています - `file_exists` と `EEXIST` はC++の識別子/マクロ名であるため、翻訳せずに保持されています - 元のフォーマットと構造は完全に維持されています (注:指定された条件に基づき、HTMLタグ内のテキストは翻訳対象外のため、元のまま保持されています) (注:このケースでは、HTMLタグ内のテキストはすべて タグで囲まれているため、翻訳対象外となります。元のHTML構造と内容をそのまま保持しています。) (注:指定された条件により、HTMLタグ・属性、 タグ内のテキスト、C++固有の用語は翻訳対象外のため、原文を保持しています) HTMLタグと属性、 タグ内のテキスト、C++固有の用語は翻訳せず、元のフォーマットを保持しました。 **翻訳結果:** HTMLタグと属性、` `タグ内のテキストは翻訳せず、元のフォーマットを保持しています。C++固有の用語(`not_supported`、`ENOTSUP`)は翻訳していません。 (注:指定された条件により、HTMLタグ内のコード部分は翻訳対象外のため、元の英語表記を保持しています) **翻訳結果:** **説明:** - ` `タグ内のテキストはC++固有の用語(`result_out_of_range`、`ERANGE`)であるため、翻訳対象外としました - HTMLタグと属性はすべてそのまま保持されています - 元のフォーマットと構造が完全に維持されています (注:指定された条件により、HTMLタグ内のテキストは翻訳対象外のため、元のまま保持されています)
名前 同等の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_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 (非推奨) 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
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
(関数)
errc 値のエラー条件を作成する e
(関数)

ヘルパークラス

型特性 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_resources , not_a_stream および stream_timeout
は廃止されたPOSIX STREAMS APIを参照していた [1]
これらを非推奨化
  1. 対応するPOSIXエラー番号ENODATA、ENOSR、ENOSTR、ETIMEはPOSIX 2017で「廃止予定」とマークされていたが、STREAMS APIはオプションであり、以前のPOSIX標準への適合には必須ではなかった(人気のあるUnix系システムがこれを実装することを拒否したため)。

関連項目

(C++11)
プラットフォーム依存のエラーコードを保持する
(クラス)
移植可能なエラーコードを保持する
(クラス)