2017-04-11 1 views
1

Solaris 플랫폼에 일부 기존 코드가 있으며이 코드를 Linux로 포팅하고 싶습니다. 그러나 Linux에서 일부 컴파일 오류가 발생합니다. Solaris에서 , 나는 다음과 같은 코드가있다 :Solaris와 Linux 사이의 sigaction 및 sigset_t 이식성

error: struct __sigset_t has no member named __sigbits 
    << ", " << a.sa_mask.__sigbits[0] 
:

#include <signal.h> 
... 
void f() { 
    struct sigaction a; 
    sigaction(sig,0,&a); 
    std::cout << (void *) a.sa_handler 
     << ", " << (void *) a.sa_sigaction 
     << ", " << a.sa_mask.__sigbits[0] 
     << ", " << a.sa_mask.__sigbits[1] 
     << ", " << a.sa_mask.__sigbits[2] 
     << ", " << a.sa_mask.__sigbits[3] 
     << ", " << (void *) a.sa_flags 
     << std::endl; 
} 

내가 GCC 4.9.2을 사용하여 Linux에서 컴파일하려고, 내가받을 다음과 같은 컴파일 오류 (Solaris에서 확인 컴파일)

... __sigbits[1], __sigbits[2], __sigbits[3]도 마찬가지입니다.

Linux에 해당하는 항목이 있습니까?

+2

'__sigbits'회원님은 무엇을하려하십니까? 왜 출력하고 있니? 언더 스코어 접두사는 사용자가 발견 한대로 구현에 종속됨을 의미합니다. 당신이하고 싶은 * all *이 인쇄된다면, 간단히 리눅스에서 신경 쓰지 마라. –

답변

1

POSIX 호환 방법은 sigismember 기능을 사용하는 것입니다.

int i; 
for (i=0; i<32; i++) { 
    printf("signal %d masked: %s\n", i, sigismember(&a.sa_mask, i) ? "yes", "no"); 
}