Visualizzazione dei risultati da 1 a 3 su 3

Discussione: gestore segnali

  1. #1

    gestore segnali

    salve....ho il seguente problema!

    Sto costruendo una shell.
    Devo impostare il gestore del segnale SIGINT in modo tale che mi ripresenti il prompt (>).

    La shel e' sempre in un ciclo while che aspetta i caratteri dall'utente.

    Codice PHP:
    signal(SIGINT,my_sgn_handler);

    //-------------------------------

    void sgn_handler(int signo)
        {
        if(
    signo==SIGINT)
            {
            
    printf("\n >");
            }
        
    signal(signo,sgn_handler); //reimposto il gestore
            //QUA DEVO TORNARE NEL WHILE DI LETTURA DEI CARATTERI,MA UANDO LA FUNZIONE       //TERMINA CIO' NN AVVIENE


        

    Quando premo ctrl^C il gestore di segnali che ho scritto viene invocato,ma un volta termintao non ritorna nel while di attesa dei caratteri,rimanendo in uno stato indefinito.
    Non esiste una tecnica per fare un break point nel while,e ritornarci dal gestore dei segnali????

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,526
    non c'entra nulla con la soluzione ma per curiosità di studio personale potresti postare tutto il codice?

  3. #3
    gaurda che sono un sacco di file..e di codice...miposto il file con il main per rendere l'idea

    Codice PHP:


    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <signal.h>
    #include "smsh.h"

    void fatal(char *s1char *s2int n);

    //-------------------------------------------------------------------------------------------------------------

    int main()
        {
        
    char *cmdline,*prompt,**arglist;
        
    int result;
        
        
    prompt DFL_PROMPT;
        
    setup();

        while((
    cmdline next_cmd(prompt,stdin)) != NULL)
            { 
    //cmdline è una stringa che contiene tutta la linea di comando
            
    if((arglist splitline(cmdline)) != NULL)
                {  
    //arglist è un array di puntatpri a stringhe con i comandi e i parametri
                
    result execute(arglist,0," ");  //usa execvp per mandare in esecuzione il comando
                
    free(arglist);
                }
            
    free(cmdline);
            }
        return 
    0;
        }

    //-------------------------------------------------------------------------------------------------------------

    void setup()
    /* scopo: inizializzazione della shell
     * ritorna: nulla. chiama fatal() in caso di problemi
     */
        
    {
        
    signal(SIGINT,sgn_handler);
        
    signal(SIGQUIT,SIG_IGN);
        } 

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 © 2024 vBulletin Solutions, Inc. All rights reserved.