설정 (OSX 10.9.5 (13F34)) 다음과 같은 간단한 프로그램 :OS X 용은 sigaction 잘못 맥북에 sa_mask
#include <stdio.h>
#include <signal.h>
static void nop(int unused) { }
int
main(void) {
struct sigaction sa, osa;
sigset_t mask;
sigemptyset(&sa.sa_mask);
printf("Errno after sigempty sa_mask: %d\n", errno);
sigemptyset(&osa.sa_mask);
printf("Errno after sigempty oldsa_mask: %d\n", errno);
sa.sa_flags = 0;
sa.sa_handler = nop;
sigprocmask(0, NULL, &mask);
printf("Errno after sigprocmask mask: %d\n", errno);
printf("%d\n", sigismember(&mask, SIGALRM));
sigaction(SIGALRM, &sa, &osa);
printf("Errno after sigaction sa osa: %d\n", errno);
printf("%d\n", sigismember(&osa.sa_mask, SIGALRM));
printf("%d\n", sigismember(&sa.sa_mask, SIGALRM));
return 0;
}
는 불가사의 인쇄 :
Errno after sigempty sa_mask: 0
Errno after sigempty oldsa_mask: 0
Errno after sigprocmask mask: 0
0
Errno after sigaction sa osa: 0
1
0
내가 기대 그 sa_mask
멤버 osa
의 값이 sigprocmask
인 mask
과 일치해야합니다.
POSIX는이 필드에 대한 요구 사항을 지정합니까? 맨페이지에있는 유일한 언급은 차단할 수없는 신호와 관련하여 그 값이 지정되지 않은 SIGKILL
과 같은 것입니다.
,이 프로그램의 인쇄는 :
Errno after sigempty sa_mask: 0
Errno after sigempty oldsa_mask: 0
Errno after sigprocmask mask: 0
0
Errno after sigaction sa osa: 0
0
0
예상대로.
GCC 버전은 다음과 같습니다
$ gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn)
Target: x86_64-apple-darw
진은에 링크되어
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
OS X에서 사용중인 라이브러리 (및 버전)는 무엇입니까? 'errno'는 각각'sig * '호출 후에 어떤 것을 말합니까? –
@BlueMoon이 질문에 대답하기 위해 질문을 업데이트했습니다. – Dave