myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

C Signal Handler

Willkommen

myGully

Links

Forum

 
Antwort
 
Themen-Optionen Ansicht
Ungelesen 28.06.12, 18:38   #1
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
Antwort


Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:36 Uhr.


Sitemap

().