과 같이 정의 (내 시스템에 소스)이해 C의 errno를 내 시스템 <code>errno</code>에
- 내가 사방 검색
하지만
__error()
함수의 정의를 찾을 수 없으므로 누군가가 그 정의를 표시하거나 설명 할 수 있습니까? 식
errno = 0
이 위의 정의와 어떻게 작동합니까? (함수에0
할당?)?errno = 0
은* __error() = 0
으로 확장됩니까?
감사
과 같이 정의 (내 시스템에 소스)이해 C의 errno를 내 시스템 <code>errno</code>에
하지만 __error()
함수의 정의를 찾을 수 없으므로 누군가가 그 정의를 표시하거나 설명 할 수 있습니까?
식 errno = 0
이 위의 정의와 어떻게 작동합니까? (함수에 0
할당?)? errno = 0
은 * __error() = 0
으로 확장됩니까?
감사
__error
함수는 호출 한 쓰레드의 errno
변수에 대한 포인터를 반환합니다. errno
매크로는 해당 포인터를 역 참조하여 등호의 양쪽에 나타날 수있는 lvalue가됩니다.
기능은 특정 스레드에 대한 errno
변수에 대한 올바른 주소를 결정합니다. 각 스레드는 자체적으로 가져옵니다.
예, 해당 스레드의 errno
변수에 0
을 할당하는 것은 (* __error()) = 0;
이됩니다.
답변을 주셔서 감사합니다. 즉, 내 OS 함수 '__error()'의 어딘가에'int * __error() {return &errno;} '이라는 정의가 있음을 의미합니다. 맞습니까? 그리고'errno'는 .c 파일에서'static int errno'입니까 ?? – Orion
@ManiH : 아마도 좀 더 복잡 할 것이다. 반환 된'errno'는 전역 적이 지 않지만 일종의 스레드 로컬 저장소 (즉, 각 스레드에 대해'errno' 인스턴스가 있습니다. '__error()'구현은 현재 스레드를 기준으로 인스턴스에 대한 포인터를 검색합니다. –
"내 시스템"이 무엇인지 말씀해 주시겠습니까? –