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