У меня есть устаревший код на платформе Solaris, и я хотел бы перенести его на Linux, но у меня возникает ошибка компиляции в Linux. В Solaris у меня есть следующий фрагмент кода:
#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;
}
Когда я пытаюсь скомпилировать в Linux с помощью gcc 4.9.2 (в Solaris компилируется нормально), я получаю следующую ошибку компиляции:
error: struct __sigset_t has no member named __sigbits
<< ", " << a.sa_mask.__sigbits[0]
... и аналогично для __sigbits[1]
, __sigbits[2]
, __sigbits[3]
.
Есть ли аналог в Linux?
__sigbits
участником? Зачем ты его выводишь? Как вы уже поняли, префикс подчеркивания означает, что он зависит от реализации. Если вы все хотите это распечатать, просто не беспокойтесь о Linux. - person Roger Lipscombe   schedule 11.04.2017