에러노를 설정할까요?
저는 다음과 같은 인터페이스를 내보내는 모듈을 쓰고 있습니다.send
그리고.recv
.
이러한 함수는 각각 송수신 바이트 수를 반환하도록 되어 있기 때문에, 통상의 에러 관리(즉, 열거형 사용 및 니모닉 값 반환)를 실시할 수 없습니다.
이런 상황에서 제가 세팅해야 할까요?errno
표준 도서관처럼요?만약 그렇다면, 그 이후부터errno
스레드에 고유한가, 스레드에 특정 쓰기 방법이 있는가, 아니면 단순히 값을 할당할 수 있는가?
편집: 실험해보니 그 설정이 눈에 띄었다.errno
과제로 인해 효과가 있습니다.그래도: 어떤 시스템에서든 안전하고 휴대할 수 있습니까?
설정할 수 있을 뿐만 아니라errno
, 대부분의 경우 를 설정할 필요가 있습니다.errno
일부 라이브러리 함수를 호출할 때 처음 설정한 경우에만 오류를 확실하게 검출할 수 있습니다.errno
0으로 합니다.예에 대해서는, 을 참조해 주세요.
의 POSIX 사양에서strtol
:
[CX] [Option Start]strtol() 함수는 성공한 경우 errno 설정을 변경하지 않습니다.
0, {LONG_MIN} 또는 {LONG_MIN} 및 {LONG_MAX} 또는 {LONG_MAX}은(는) 오류 발생 시 반환되며 성공 시 유효한 반환이므로 오류 상황을 확인하려면 errno를 0으로 설정한 다음 strtol() 또는 strtoll()을 호출한 다음 errno를 확인해야 합니다.[옵션 종료]
이것은 조금 오래된 것이지만, errno-manual 섹션 3에 따르면 매크로이지만 스레드 로컬이 됩니다.
실제로는, 「적절」한 에러 관리를 실시할 수 있습니다.이것은, 이 에러를 반환하기 때문입니다.int
.
읽기 또는 쓰기 바이트 수에 음수가 아닌 값을 사용하고 오류 코드에는 음수 값을 사용합니다.자신을 제한하지 않아도 된다.-1
:
enum myerrors {
ERR_NO_MEMORY = -1,
ERR_BAD_ARGS = -2,
ERR_CPU_EXPLODED = -3,
// and so on
};
단, 설정errno
당신이 원하는 방식으로 사용할 수 있습니다.표준에는 다음과 같이 기술되어 있다errno
변경할 수 있는 l값으로 확장됩니다.즉, 사용자가 설정할 수 있습니다.부터C1x/n1425, 7.5 Errors <errno.h>
:
...그리고.
errno
이 값은 타입 int의 수정 가능한 l값으로 확장되며, 이 값은 여러 라이브러리 함수에 의해 양의 오류 수로 설정됩니다.
예, 할당할 수 있으며, 할당은 스레드 세이프입니다.자세한 내용은 errno 스레드 세이프입니까?를 참조하십시오.
값을 할당할 수 있습니다.errno
단, 상황에 따라서는 에러를 나타내는 다른 방법이 있을 수 있습니다.
- 읽은 바이트 수를 반환하지 않고 대신 유형이 지정된 출력 매개 변수를 사용합니다.
int *
(오류)size_t *
을 사용법)그런 다음 오류 코드를 반환할 수 있습니다. - 반환 유형이 서명된 유형이고 음의 송수신 바이트 양이 의미가 없는 경우 음의 값을 사용하여 각 오류 상태를 표시합니다.
송신원: http://support.sas.com/documentation/onlinedoc/sasc/doc700/html/lr1/errno.htm
「」의 값.
errno
EDOM
★★★★★★★★★★★★★★★★★」ERANGE
휴대성에 대한 질문에 대한 답변입니다.
언급URL : https://stackoverflow.com/questions/9856822/should-i-set-errno
'programing' 카테고리의 다른 글
소정수 배열 클리어: memset vs. for loop (0) | 2022.09.01 |
---|---|
URL을 변경하지 않고 vue 라우터 경로 변경 (0) | 2022.09.01 |
C/C++에서 바이트의 비트 순서를 되돌리는 가장 간단한 방법은 무엇입니까? (0) | 2022.08.31 |
이클립스에서 항아리를 가져오는 방법은? (0) | 2022.08.31 |
IACA란 무엇이며 어떻게 사용하는가? (0) | 2022.08.31 |