programing

perror("...")와 fprintf("stderr, "...")는 언제 사용해야 합니까?

newsource 2022. 7. 30. 19:22

perror("...")와 fprintf("stderr, "...")는 언제 사용해야 합니까?

man 페이지와 일부 코드를 읽는 것은 언제 사용해야 하는지 또는 더 나은지 이해하는 데 큰 도움이 되지 않았습니다.perror("...")또는fprintf(stderr, "...").

부르기perror해석된 값을 얻을 수 있습니다.errno는 POSIX syscalls에 의해 써지는 스레드 로컬 오류 값입니다(즉, 각 스레드에는 고유의 값이 있습니다).errno예를 들면, 에 콜을 발신했을 경우 등입니다.open()에러가 발생했습니다(즉, 에러가 반환되었습니다.-1)를 호출할 수 있습니다.perror실제 오류가 무엇인지 확인하기 위해 즉시 작업을 수행합니다.그 사이에 다른 syscall을 호출했을 경우, 의 값은errno덮어쓰게 될 것이고,perror이전 시스템 스콜에서 오류가 발생한 경우 문제를 진단하는 데 아무런 도움이 되지 않습니다.

fprintf(stderr, ...)한편, 커스텀 에러 메시지를 인쇄하기 위해서 사용할 수 있습니다.인쇄처stderr에러 리포트의 출력이, 「통상」의 출력과 혼재하는 것을 피할 수 있습니다.stdout.

주의해 주세요fprintf(stderr, "%s\n", strerror(errno))와 유사하다perror(NULL)에의 요구 이후strerror(errno)출력된 문자열 값이 생성됩니다.errno를 사용하여 다른 커스텀에러 메시지와 조합할 수 있습니다.fprintf.

그들은 다소 다른 일을 한다.

사용하다perror()전갈을 인쇄하다stderr에 대응하고 있다errno를 사용합니다.fprintf()인쇄하다stderr또는 기타 스트림입니다. perror()는 매우 전문적인 인쇄 기능입니다.

perror(str);

와 동등하다

if (str)
    fprintf(stderr, "%s: %s\n", str, strerror(errno));
else
    fprintf(stderr, "%s\n", strerror(errno));

perror(const char *s): 지정한 문자열 뒤에 현재 값을 나타내는 문자열을 출력합니다.errno.

stderr: 자체 오류 메시지를 (단말기에 연결)에 파이핑하는 데 사용되는 출력 스트림입니다.

관련:

char *strerror(int errnum): 에러 번호를 지정하면 관련된 에러 문자열이 반환됩니다.

perror()는 항상 stderr에 씁니다.fprintf와 함께 사용되는 strrrr은 stderr을 포함한 모든 출력에 쓸 수 있지만 배타적이지는 않습니다.

fprintf(stdout, "Error: %s", strerror(errno));
fprintf(stderr, "Error: %s", strerror(errno)); // which is equivalent to perror("Error")

또한 perror는 "text: error description"이라는 자체 텍스트를 사용합니다.

perror 함수는 실행 호출이 사용자 공간에서 kernal 공간으로 이동하는데 더 많은 시간이 소요되며 fheras fprintf 호출이 goest에서 api에서 kernal로 이동한다.

언급URL : https://stackoverflow.com/questions/12102332/when-should-i-use-perror-and-fprintfstderr