sigaction
Jorge Almeida
jjalmeida at gmail.com
Tue Mar 24 13:20:30 PDT 2009
In case someone is used to sigaction(2) in linux, on a PIV:
$ make
diet gcc -Os -march=pentium4 -pipe -fomit-frame-pointer -Wall -o rdfromfile -I /opt/libowfat/include rdfromfile.c /opt/libowfat/lib/libowfat.a
rdfromfile.c:15: error: expected '=', ',', ';', 'asm' or '__attribute__' before '.' token
rdfromfile.c:16: error: expected '=', ',', ';', 'asm' or '__attribute__' before '.' token
rdfromfile.c:17: error: expected '=', ',', ';', 'asm' or '__attribute__' before '.' token
make: *** [rdfromfile] Error 1
(Never mind the "diet" stuff, I tried with glibc and it's the same.)
1 #include <unistd.h>
2 #include <signal.h>
3 #include <sys/types.h>
4 #include <sys/wait.h>
5 #include <stdlib.h>
6 #include <errno.h>
7 #include <buffer.h>
8 #include <open.h>
9 #define STDERR buffer_2
10 void err3msg(char *msg1, char *msg2, char *msg3);
11 void errmsg(char *msg);
12 pid_t cpid;
13 void forwardsignal(int signum);
14 struct sigaction frwdsigs;
15 frwdsigs.sa_handler=forwardsignal;
16 frwdsigs.sa_mask=0;
17 frwdsigs.sa_flags=0;
The relevant (I think) part of signal.h:
struct sigaction {
#if defined(__alpha__) || defined(__ia64__) || defined(__hppa__)
union {
sighandler_t _sa_handler;
void (*_sa_sigaction)(int, siginfo_t*, void*);
} _u;
unsigned long sa_flags;
sigset_t sa_mask;
#elif defined(__mips__)
unsigned long sa_flags;
union {
sighandler_t _sa_handler;
void (*_sa_sigaction)(int, siginfo_t*, void*);
} _u;
sigset_t sa_mask;
void (*sa_restorer)(void);
int32_t sa_resv[1];
#else /* arm, i386, ppc, s390, sparc, saprc64, x86_64 */
union {
sighandler_t _sa_handler;
void (*_sa_sigaction)(int, siginfo_t*, void*);
} _u;
unsigned long sa_flags;
void (*sa_restorer)(void);
sigset_t sa_mask;
#endif
};
#define sa_handler _u._sa_handler
#define sa_sigaction _u._sa_sigaction
I'm really out of ideas... (but then, I'm a beginner in C...)
--
Jorge Almeida
More information about the Linux-users
mailing list