std:: errc
From cppreference.net
|
헤더에 정의됨
<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
|
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
|
비멤버 함수
|
(C++11)
|
errc
열거형 값
e
에 대한 오류 코드 값을 생성합니다
(함수) |
|
(C++11)
|
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] |
해당 상수들을 사용 중단(deprecated) 처리함 |
- ↑ 해당 POSIX 오류 번호 ENODATA, ENOSR, ENOSTR 및 ETIME이 POSIX 2017에서 "사용되지 않음"으로 표시되었지만, STREAMS API는 선택 사항이었으며 이전 POSIX 표준 준수를 위해 필수는 아니었습니다 (인기 있는 유닉스 계열 시스템들이 이를 구현하기를 거부했기 때문입니다).
참고 항목
|
(C++11)
|
플랫폼 종속 에러 코드를 보유
(class) |
|
(C++11)
|
이식 가능한 에러 코드를 보유
(class) |