2016-10-20 6 views
0

모든 것이 제목에 있습니다. 맨 페이지는 아무 말도하지 않습니다. 어떤 구글은 dlopen 후에 어떤 사람들이 errno를 체크하고 있다고보고하지만, 단지 몇개 그리고 다양한 결과를 가지고있다. 이 함수는 성공/실패 값을 반환하지만 실패의 원인을 어떻게 파악해야합니까?dlopen()이 errno를 설정합니까?

그래서 dlopen()은 errno를 설정합니까? 다른 errno 값은 어디에 정의 되었습니까? 그렇지 않은 경우 오류의 원인을 확인하는 데 사용해야하는 것은 무엇입니까?

+2

'man dlopen'은 분명히'dlerror'에 대해 우리에게 말하고 있습니다 ... –

+2

* 설정 *'errno'는 * effecting *'errno'와 다릅니다. 'dlopen()'을 호출하면'errno'의 값을 변경하는 것이 가능합니다. 예를 들어'dlopen()'이 라이브러리를 찾으려고 할 때'open()'호출은 실패 할 수있다. –

+0

OP가'dlopen'에 대한 메뉴얼 페이지를 읽을 수 없으므로이 질문을 주제로 닫으려고합니다. – KevinDTimm

답변

6

No (강조가 추가됨).

성공적으로 완료되면 dlopen()은 기호 테이블 핸들을 반환해야합니다. 파일을 찾을 수 없거나 읽음을 위해 열 수 없거나 dlopen() 처리를위한 적절한 실행 가능 개체 파일 형식이 아니거나 파일을로드하거나 심볼 참조를 재배치하는 과정에서 오류가 발생하면 dlopen()은 널 포인터를 반환해야한다. 자세한 진단 정보는 dlerror()을 통해 제공됩니다.


다른 사람에 의해 언급 한 바와 같이, 아무것도 errno을 수정 (기능 dlopen() 전화, 가능성, 또는) dlopen()을 금지합니다. 그러나 표준을 준수하는 dlopen()errno을 통해 자체 오류를보고하지 않습니다. dlerror()으로 전화해야합니다.

+0

OK, 내가 알지 못했던 dlerror에 관한 남자 부분을 놓쳤습니다. Andrew에게 감사의 말을 전합니다. 이유는 분명히 왜 내가 errno가 바뀌었을 때 내가 트랙에 있다는 것을 설명해주었습니다 ... – user1159290

+0

개인적으로, 저는 단순히 로컬 맨 페이지를 사용하는 대신 Open Group의 웹 사이트를 확인한다는 뜻의 POSIX를 따르는 것을 좋아합니다. 대부분의 맨 페이지는 패턴을 따르지만 표준화되지 않았기 때문에 오류 정보가 자체 섹션에 있거나 "반환 ​​값"섹션에있을 수 있습니다. –

+0

이 대답은'dlopen'은'errno'에 * set * (의미있는 값을 지정하지 않음),'errno'를 0 이외의 다른 값으로 clobber 할 수 있다는 사실을 놓치고 있습니다. 그렇게 할 수 없도록 명시 적으로 금지되어 있습니다). –