Sygnał, nie odbieranie sygnału

0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <signal.h>
#include <unistd.h> 

	
void sighandler ( int mysignal) // Gdy wyślemy sygnał wykona się ciało tej funkcji 
{
  	printf (" Otrzymano sygnał %d\n", mysignal);
	signal(mysignal , sighandler);
}


 int main ( int argc , char *argv[] )
  {
    char *nazwa = argv[0]; // Pierwszy argument z konsoli
      if ( argc != 3 && argc != 2 )
        perror("Nieprawidłowa liczba argumentów");
	  
	  int mysignal; 
          char *rodzaj_sygnalu = argv[1]; // Drugi argument z konsoli
	  
             if( argc == 2) // nie podobano kodu syngnalu w lini komend
		{
		   pause ();
		}

		else 
		 {
		     char *numer_sygnalu = argv[2]; // Trzeci argument z konsoli
		     
		     mysignal = atoi(numer_sygnalu);
		 }	

		  switch ( rodzaj_sygnalu[0] )
		   {
			case ( 'd'):
			  signal (mysignal , SIG_DFL);
			  break;

			case ('i'):
			  signal (mysignal , SIG_IGN);
   			  break;

			case ('p'):
			  signal(mysignal, sighandler);
			  break;

			default:
			  printf("Prawidłowy rodzaj sygnalu to <d/i/p>");
			  break;
		   }



printf("Koniec programu");
return 0;
}

Program odpalany jest w konsoli wraz z podaniem dwoch argumentow. ./nazwa p 15. Powinno wymusić od programu zrealizowanie funkcji sighandler.

1
Exceleent napisał(a):

Program odpalany jest w konsoli wraz z podaniem dwoch argumentow. ./nazwa p 15. Powinno wymusić od programu zrealizowanie funkcji sighandler. Dlaczego tak sie nie dzieje ?

Musisz jeszcze ten sygnał wysłać, bo jak na razie to jedynie zarejestrowałeś sighandler. Dodaj na końcu programu pętlę while (TRUE) sleep(1);

W konsoli:

$ ./sighandler p 15 &
[1] 91332
$ kill -15 91332
 Otrzymano sygnał 15
0

BTW, użyj sigaction zamiast signal, nie będiesz musiał ustawiać obsługi sygnału drugi raz w handlerze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1