programing

에러노를 설정할까요?

copysource 2022. 9. 1. 00:01
반응형

에러노를 설정할까요?

저는 다음과 같은 인터페이스를 내보내는 모듈을 쓰고 있습니다.send그리고.recv.

이러한 함수는 각각 송수신 바이트 수를 반환하도록 되어 있기 때문에, 통상의 에러 관리(즉, 열거형 사용 및 니모닉 값 반환)를 실시할 수 없습니다.

이런 상황에서 제가 세팅해야 할까요?errno표준 도서관처럼요?만약 그렇다면, 그 이후부터errno스레드에 고유한가, 스레드에 특정 쓰기 방법이 있는가, 아니면 단순히 값을 할당할 수 있는가?

편집: 실험해보니 그 설정이 눈에 띄었다.errno과제로 인해 효과가 있습니다.그래도: 어떤 시스템에서든 안전하고 휴대할 수 있습니까?

설정할 수 있을 뿐만 아니라errno, 대부분의 경우 를 설정할 필요가 있습니다.errno일부 라이브러리 함수를 호출할 때 처음 설정한 경우에만 오류를 확실하게 검출할 수 있습니다.errno0으로 합니다.예에 대해서는, 을 참조해 주세요.

의 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단, 상황에 따라서는 에러를 나타내는 다른 방법이 있을 수 있습니다.

  1. 읽은 바이트 수를 반환하지 않고 대신 유형이 지정된 출력 매개 변수를 사용합니다.int * (오류)size_t *을 사용법)그런 다음 오류 코드를 반환할 수 있습니다.
  2. 반환 유형이 서명된 유형이고 음의 송수신 바이트 양이 의미가 없는 경우 음의 값을 사용하여 각 오류 상태를 표시합니다.

송신원: http://support.sas.com/documentation/onlinedoc/sasc/doc700/html/lr1/errno.htm

「」의 값.errnoEDOM ★★★★★★★★★★★★★★★★★」ERANGE

휴대성에 대한 질문에 대한 답변입니다.

언급URL : https://stackoverflow.com/questions/9856822/should-i-set-errno

반응형