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
'programing' 카테고리의 다른 글
Vuejs에서 v-select 옵션을 동적으로 사용하지 않도록 설정하는 방법 (0) | 2022.07.30 |
---|---|
다른 Vue 컴포넌트에서 Vue 컴포넌트의 위치를 갱신하는 방법('반복') (0) | 2022.07.30 |
TypeError: 'undefined' 또는 'null'의 속성 'compile'을 파기할 수 없습니다. (0) | 2022.07.30 |
스트림의 개념을 설명할 수 있나요? (0) | 2022.07.30 |
SIGUSR1 및 SIGUSR2를 트리거하는 방법 (0) | 2022.07.30 |