반응형



pthread 관련 함수 중

phtread_kill 함수는 특정 Thread에게 signal을 전송하는 기능을 수행하는 함수인데 관련 내용은 아래와 같다.


SYNTAX

int pthread_kill(pthread_t thread, int sig);

RETURN VALUE
성공 : 0
실패 : ERROR
ERRORS
ESRCH : thread ID로 해당 thread를 찾을 수 없는 경우
EINVAL : 잘못된 signal number를 전달할 경우



이 pthread_kill 함수를 코딩하여 멀티 플랫폼(Unix/Linux)에서 컴파일 하려고 할 때 

-lpthread 링크를 걸어야 하는 것 외에 추가적으로 명심해야 할 것이 있다.


그것은 바로 UNIX와 LINUX에서 오브젝트 파일을 컴파일 할 때 헤더파일 참조 위치가 다르다는 것인데

보통 코딩할 시 #include<pthread.h> 헤더파일 만을 추가 한 뒤 똑같은 코드를 

AIX, HP-UX(UNIX 계열), REDHAT,CENTOS(LINUX) 등에서 컴파일 하게 되면 재미 있는 현상을 경험 할 수 있다.


그것은 바로 LINUX에서 pthread_kill 함수를 찾을 수 없다는 내용.

error: 'pthread_kill' was not declared in this scope


AIX랑 HP-UX는 컴파일이 잘 되는데.. 

왜 리눅스 계열에서는 해당 에러가 발생하나 봤더니 그 이유는 /usr/include pthread.h 파일을 확인해 보면 알 수 있다.


유닉스 계열에서는 해당 함수가 /usr/include/pthread.h 또는 /usr/include/sys/pthread.h에 프로토 타입이 선언되어 있는 반면

리눅스는 찾을 수 없다..


이유는 리눅스에서는 해당 함수의 원형이 signal.h 파일에 포함되어 있기 때문이다.

시그널을 날리기 때문에 원형이 여기에 있는 것 같은데... 조금은 재미있는 배치다.

이것 때문에 삽질을... 얼마나 한겨..


끝.

반응형

+ Recent posts