2012-08-08 2 views
2

안에 perror를 사용해야합니까? perror을 신호 처리기 안에 사용해야합니까?우리는 <code>printf</code>과 다른 stdio 함수와 같은 사용자 공간 버퍼를 가지고 있기 때문에 신호 처리기 내부에서

+1

'perror '는 시그널 핸들러 내에서 호출하는 것이 안전하지 않은 것으로 간주됩니다. 안전한 기능 목록은 [here] (http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html#tag_02_04)에서 찾을 수 있습니다. –

답변

2

perror는 비동기 신호 안전 기능 표에 나열되지 않은 (예 section 2.4.3 Signal Actions) 그래서 비 비동기 신호를 차단하는 신호에 응답하여 호출 될 수있는 신호 처리기에서 호출 안전하지 - 안전 기능.

1

은 비동기 신호에 안전하지 않으므로 신호 처리기에서 호출 할 때 문제가 발생할 수 있지만 이미 오류가 발생하면 호출하거나 다른 로그 유틸리티 (아마 aysnc- 신호 안전)을 사용하여 오류를보고하십시오. 출력 로그 메시지가 엉망이되지 않을 가능성이 있습니다. 심지어 엉망이 되어도 정보를 얻을 수 있습니다. 아무 것도없는 것보다 낫습니다.

자신 만의 re-entrancy 안전 로그 유틸리티를 작성할 수도 있습니다. (re-entrancy ringbuffer, rare write() 시스템 콜)