Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    34

    [C] Programmino con Linux

    Salve a tutti. Devo scrivere il seguente programma in C su Linux. Deve ricevere in input due interi A e B. Se il processo riceve un segnale SIGUSR1 ne stampo la somma. Con SIGUSR2 ne stampo la differenza. Il programma esce con Ctrl^C. Ho sviluppato il codice nel seguente modo.

    codice:
    #include <stdio.h> 
    #include <signal.h> 
    #include <unistd.h> 
    #include <stdlib.h>  
    
    int a,b,somma,diff;  
    
    void handler(int sig){
    
    if(sig==SIGUSR1)
    printf("la somma è: %d\n",somma); 
    else if(sig==SIGUSR2)
    printf("la differenza è: %d\n",diff); 
    }  
    
    void main(){ 
     
    signal(SIGUSR1,handler); 
    signal(SIGUSR2,handler);  
    
    while(1){ 
    printf("digita il numero a:\n"); 
    scanf("%d",&a); 
    printf("digita il numero b:\n"); 
    scanf("%d",&b); 
    somma=a+b; 
    diff=a-b; 
    printf("manda il segnale al processo %d\n",getpid()); 
    pause(); 
    } 
    }
    All'invio del segnale mediante kill non succede nulla. Riesco solo a far terminare il programma con Ctrl^C. Devo ammettere che la materia mi risulta un pò ostica ma se non riesco a capire in che modo impostare un semplice esercizio come questo, non potrò andare agli step successivi. Spero che qualcuno mi possa far capire meglio come funzionano i processi e i segnali sotto Linux. Grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707

    Re: [C] Programmino con Linux

    Originariamente inviato da aedesy
    <cut>
    signal(SIGUSR1,handler);
    signal(SIGUSR2,handler);
    <cut>
    Hai registrato un gestore per i segnali USR1 e USR2 quindi devi usare kill con:
    $ kill -USR1 pid
    $ kill -USR2 pid

    Ciao.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    34
    Grazie per la risposta. Infatti invoco la kill come da suggerimento ma non succcede nulla. Non capisco il perché

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Strano, a me funziona correttamente:

    codice:
    $ ./demo
    digita il numero a:
    10
    digita il numero b:
    20
    manda il segnale al processo 2130
    la somma è: 30
    digita il numero a:
    la differenza è: -10
    da un'altra finestra digito:
    $ kill -USR1 2130
    $ kill -USR2 2130

    Ciao.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    34
    Vero. Se eseguo la kill da un'altra finestra il programma va. Ma è normale fare così? Perché non posso eseguire la kill dalla stessa finestra, quando invece Ctrl^C funziona?

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Originariamente inviato da aedesy
    Ma è normale fare così?
    Direi di sì, come fai ad eseguire "kill" in una shell che è occupata ad eseguire il tuo programma?
    Oppure lo mandi in background, esegui kill, e lo riporti in foreground.
    Oppure invece dei SIGUSR gestisci il CTRL+C.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    34
    Originariamente inviato da c0der
    Direi di sì, come fai ad eseguire "kill" in una shell che è occupata ad eseguire il tuo programma?
    Immaginavo di aver fatto una domanda stupida . Ancora ne devo fare di strada. Ma ad ogni modo so che il programma è stato scritto bene per le mie conscenze. Grazie dell'aiuto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.