[ANSI C] Bład w programie do zarządzania sygnałami


(Daniel K.) #1

Napisałem prosty program na zaliczenie, który ma za zadanie zarządzać sygnałami w systemie Linux.

Oto kod źródłowy tego programu:

#include 


#include 

#include 




void menu(char* program);

void przechwyc();


main(int argc, char** argv) {


       int sygnal;    


       if (argc != 3) {

       menu(argv[0]);

       return 0;

       }


       if(argv[1][0]=='0') {

       sygnal=SIGINT;

       } 


       else {

       if (argv[1][0]=='1'){

       sygnal=SIGSTOP;

       } 


       else {

       usage(argv[0]);

       return 0;

       }




 switch (argv[2][0]){

  case 'd': {

       printf("Obsluga domyslna");

       signal(sygnal,SIG_DFL);

       break;

       }


  case 'i': {

       printf("Ignorowanie");

       signal(sygnal,SIG_IGN);

       break;

       }    


  case 'p': {

       printf("Przechwytywanie");

       signal(sygnal,przechwyc);

       break;

       } 


  default: {

           menu(argv[0]);

           return 0;

           break;

           }

 }


 sleep(5);

 return 0;      

       }     


void menu(char* program) {

     printf("URUCHOMILES PROGRAM Z BLEDNYMI ARGUMENTAMI! \n");

     printf("Zapoznaj sie z ponizsza instrukcja. \n\n");

     printf("Oto wzor: \n");

     printf("%s \n \n", program);


     printf("Dostepne argumenty dla opcji : \n");

     printf("0 - SIGINT (zakonczenie procesu) \n");

     printf("1 - SIGSTOP (zatrzymanie procesu) \n \n");


     printf("Dostepne argumenty dla opcji : \n");

     printf("'d' - domyslna obsluga sygnalu \n");

     printf("'i' - ignorowanie sygnalu \n");

     printf("'p' - przechwycenie sygnalu\n");


     }


void przechwyc() {

     printf("Wybrales operacje przechytywania sygnalu - SYGNAL PRZECHWYCONY");

     }

Podczas próby kompliacji wywala mi błąd:

Co to za błąd i jak go naprawić?

Proszę o pomoc, z góry bardzo dziękuje :slight_smile:

Poazdrawiam!


(Maniooo666) #2

Witam,

pierwsze, co mi się w oczy rzuca, to podwójny else:

else {

       if (argv[1][0]=='1'){

       sygnal=SIGSTOP;

       }


       else {

       usage(argv[0]);

       return 0;

       }

Albo zastosuj else if, albo pomyśl nad nieco inną konstrukcją tych instrukcji.