Einzelnen Beitrag anzeigen
Ungelesen 28.06.12, 18:38   #5
Huugo
Anfänger
 
Registriert seit: Jul 2010
Beiträge: 2
Bedankt: 0
Huugo ist noch neu hier! | 0 Respekt Punkte
Standard

Danke germgerm auf die idee bin ich noch nich gekommen
Dachte es liegt an meinen bescheidenen C Kentinissen, da ich sonst fast nur Java programmiere.

Hier noch der funktionierende Code für alle die es interessiert
Code:
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>


void childProcess();
volatile int signo = 0;
volatile int a=10;
volatile int b=0;
volatile int c;
void childProcess(){
	int pid;
   	pid = fork();
 
   	if (pid == 0){
      		/* Childprocess*/
        	sleep (1);   
      		exit (5);
   	}else if (pid > 0){ 
      		/* Parentprocess*/  
   	}else{   
      		/*Error by fork()*/
      		fprintf (stderr, "Error");
      		exit (1);
   	}
}
static void pSigHandler(int sig){

	printf("Wake up call ... !!! - Catched signal: %d ... !!\n", sig);
	if((sig==SIGFPE)||(sig==SIGSEGV)){
		/*wihtout ignoring SIGFPE, infinity loop*/
		signal(SIGFPE,SIG_IGN);
		signal(SIGSEGV,SIG_IGN);
	}
	signo=sig;
}
 
int main(int argc, char* argv[])
{
   int i;
   int *s=0;

   	/*Parentprocess*/
   	struct sigaction psa;
   	psa.sa_handler = pSigHandler;

	for ( i = 0; i < 32; i++ ) {
		sigaction(i, &psa, NULL);
	}
   		
   	if(argc<=1){
		printf("No signal choosed\n");	
	}else{		
		int param=atoi(argv[1]);
   		switch(param){
   			case 1: 
   				 /*Timer has run down errorsignal*/
   				alarm(5);
   			break;
   				
   			case 2: 
   				/*Divide by zero errorsignal*/
   				c=a/b;
   			break;	
   			
   			case 3: 
   				/*Child has canged errorsignal*/
   				childProcess();
   			break;	
   			
   			case 4:	
   				/*Segmentation fault errorsignal*/			
   				*s=0;
   			break;	
   		}   
  	}
  
  
   while(sleep(5)){}
  
   printf("signal number (zero if no signal): %d\n",signo);
    
   return 0;

}
Huugo ist offline   Mit Zitat antworten