nginx 의 ngxerrno. c 파일 읽 기

1866 단어
file:ngx_errno. c1. 작 가 는 왜 이 모듈 을 씁 니까?2. 이 모듈 은 어떤 기능 을 완성 해 야 합 니까?3.NGX_SYS_NERR 이 물건 은 어디에서 정 의 했 습 니까? 이렇게 쓰 면 무슨 좋 은 점 이 있 습 니까?4. 왜 ngxstrerror_init 에 goto 문 구 를 사 용 했 습 니까?5. 이 모듈 에 본인 이 쓰 면 어떻게 쓰 나 요?6. 작가 의 디자인 함수 가 좋 은 곳?7. 모 르 는 점 이 있다?a1. strerror strerror 때문에r 다 신호 가 안전 하지 않 아 요.    a. 1. 신호 안전 이 아 닌 함수 에 무슨 문제 가 있 는 지 작은 예 가 있 습 니까?a2. 이 함수 가 완성 할 기능 은 errno 에 따라 설명 문자열 을 되 돌려 줍 니 다.    만약 본인 이 strerror 신호 안전 버 전 매개 변 수 를 설계 한다 면 hostrerror(int errnum, char *buf, size_t n);a3.unknowna4.ngx_strerror_init 함수 에 goto 문 구 를 두 마디 나 타 냅 니 다. goto 를 사용 하지 않 으 면...   goto 가 처음 나타 난 곳  
err = errno
   ngx_log_stderr();
   return NGX_ERROR

   두 번 째 goto 가 나타 난 곳 은 
err = errno
   ngx_log_stderr();
   return NGX_ERROR

   두 가지 방식 으로 기능 을 완성 할 때 모두 6 줄 코드 를 사용 합 니 다. 코드 줄 수 goto 판 의 작성 방법 은 우세 하지 않 습 니 다. 우세 한 곳 ngxlog_stderr 는 한 번 만 나타 납 니 다.   하면, 만약, 만약...log_stderr, goto 버 전의 쓰기 방법 은 ngx 만 바 꾸 면 됩 니 다.log_stderr, 이렇게 하면 return 버 전 처럼 가끔 발생 하지 않 고 첫 번 째 로 두 번 째 상황 을 바 꾸 는 것 을 잊 었 습 니 다.본인 의 글 씨 는 다음 과 같 습 니 다.
#define HO_NERR 256 
static char **ho_errlist;
static char *ho_unknown_error = "Unknown error";

int ho_strerror_init(void) {
    size_t len;
    int    err;

    ho_errlist = malloc(HO_NERR * sizeof(char *));
    if (ho_errlist == NULL)
        goto failed;

    for (err = 0; err < HO_NERR; err++) {
        ho_errlist[err] = strdup(strerror(err));

        if (ho_errlist[err] == NULL)
            goto failed;
    }
    return 0;

failed:
    fprintf(stderr, "alloc memory failed (%d: %s)", err, strerror(err));
    return -1;
}

char *ho_strerror(int err, char *buf, size_t n) {
    char *msg;
    msg = err<HO_NERR ? ho_errlist[err] : ho_unknown_error;

    buf[n-1] = 0;
    return strncpy(buf, msg, n - 1);
}

a6.a7.

좋은 웹페이지 즐겨찾기