[HELP] Problema Socket in C "Segmentation fault"

di il
9 risposte

[HELP] Problema Socket in C "Segmentation fault"

Ciao a tutti, sto imparando a scrivere socket in C....solo che la mia parte Server mi da questo
errore: "Segmentation fault";
(parte server e parte client sono lanciati sullo stesso pc)
il sistema funziona cosi; il client richiede al server il conteggio dei file contenuti in una cartella;

Posto la funzione che calcola il numero dei file...credo che il problema sia qui:P
int conta_file(char *name)//funzione di conteggio dei file nel direttorio..
{
DIR *dir;
struct dirent *dd;

int count = 0;
dir = opendir(name);

while((dd = readdir(dir))!= NULL)
{
printf("Trovato il file %s\n", dd->d_name);
count++;
}
printf("\nNumero totale di file %d", count);
closedir(dir);

return count;
}
qualcuno sa da cosa puo` dipendere?
(se serve posto tutto il server...)

Grazie in anticipo per la risposta!

9 Risposte

  • Re: [HELP] Problema Socket in C "Segmentation fault"

    Cosa intendi dovrebbe essere qui?
    Non sei in grado di debuggare il codice per vedere dove avviene il segmentation fault? Se sei in linux scaricati ddd (debugger gui) e valgrind (memory leaks)
  • Re: [HELP] Problema Socket in C "Segmentation fault"

    No, e da poco che uso linux .
    Ora provo ! thx
  • Re: [HELP] Problema Socket in C "Segmentation fault"

    Di niente. il seg fault arriva da un'altra parte, il pezzo incluso ad occhio (sono su un cell) sembra ok
  • Re: [HELP] Problema Socket in C "Segmentation fault"

    MmmmM non vorrei che forse sbaglio nel passare al client il nome della directory, per esempio nella
    directory del server ho creato la cartella test, e da console gli passo test come directory non e che gli devo passare l`intero percorso? :p

    Sto cercando di installare i programmi ..ddd installato e funzionante ma valgrind mi da qualke problema!!! Allora ho usato il comando apt-get..... e me lo ha installato solo che la shell me lo da come sconosciuto ? ehhehehehe minkia non vedo l`ora di usarli solo che non so come ;p
    (anche se purtroppo all`esame ci sara` solo gEdit ehehehehe )
  • Re: [HELP] Problema Socket in C "Segmentation fault"

    Int conta_file(char *name)//funzione di conteggio dei file nel direttorio..
    {
    DIR *dir;
    struct dirent *dd;

    int count = 0;
    dir = opendir(name);
    if( dir == NULL)
    {
    fprintf(stdout,"%s opendir...\n", strerror(errno));
    exit(6);
    }

    while((dd = readdir(dir))!= NULL)
    {
    printf("Trovato il file %s\n", dd->d_name);
    count++;
    }
    printf("\nNumero totale di file %d", count);

    if(closedir(dir)== -1);
    {
    fprintf(stdout,"%s closedir...\n", strerror(errno));
    exit(7);
    }

    return count;
    }
    Ho modificato cosi in modo da effettuare un controllo sul valore restituito da opendir....ed effettivamente mi da un bel NULL .....ora non mi da piu seg fault ma No such file or directory, che argomento si passa a opendir? (credo che il seg fault era causato dalla close(NULL))
  • Re: [HELP] Problema Socket in C "Segmentation fault"

    Io non so niente di linux ma così tu mandi in crash tutto il programma.
    
    if( dir == NULL)
    {
    fprintf(stdout,"%s opendir...\n", strerror(errno));
    exit(6); // vedi exit
    }
    
    Chi ti da il diritto di uscire dal programma se non sei riuscito ad aprire la directory?
  • Re: [HELP] Problema Socket in C "Segmentation fault"

    Ah no, e` solo temporaneo per capire dove non va.... o per lo meno perche` non trova la directory e perche` dir vale NULL.....una volta risolto lo rimetto apposto:).....
  • Re: [HELP] Problema Socket in C "Segmentation fault"

    Ok. Buona Pasqua a tutti.
    
    max@studio:~/test> cat prova.c
    #include <stdio.h>            
    #include <string.h>           
    #include <dirent.h>           
    #include <errno.h>            
    
    int conta_file(char *name)//funzione di conteggio dei file nel direttorio..
    {                                                                          
      DIR *dir;                                                                
      struct dirent *dd;                                                       
    
      int count = 0;
                    
      dir = opendir(name);
      if( dir == NULL)    
      {                   
        fprintf(stdout,"%s opendir...\n", strerror(errno));
        return -1;
      }
    
      while((dd = readdir(dir))!= NULL)
      {
        printf("Trovato il file %s\n", dd->d_name);
        count++;
      }
      printf("\nNumero totale di file %d\n", count);
    
      if(closedir(dir)== -1);
      {
        fprintf(stdout,"%s closedir...\n", strerror(errno));
        return -2;
      }
    
      return count;
    }
    int main ()
    {
      conta_file(".");
    
      return 0;
    }
    
    max@studio:~/test> gcc -Wall prova.c
    max@studio:~/test> valgrind ./a.out
    ==6601== Memcheck, a memory error detector
    ==6601== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al.
    ==6601== Using Valgrind-3.5.0 and LibVEX; rerun with -h for copyright info
    ==6601== Command: ./a.out
    ==6601==
    Trovato il file .
    Trovato il file prova.c
    Trovato il file a.out
    Trovato il file ..
    
    Numero totale di file 4
    Success closedir...
    ==6601==
    ==6601== HEAP SUMMARY:
    ==6601==     in use at exit: 0 bytes in 0 blocks
    ==6601==   total heap usage: 1 allocs, 1 frees, 32,808 bytes allocated
    ==6601==
    ==6601== All heap blocks were freed -- no leaks are possible
    ==6601==
    ==6601== For counts of detected and suppressed errors, rerun with: -v
    ==6601== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 4 from 4)
    max@studio:~/test>
    
    Come vedi viene da un'altra parte

    ~Max
  • Re: [HELP] Problema Socket in C "Segmentation fault"

    http://pubs.opengroup.org/onlinepubs/007908799/xsh/opendir.html
    controlla errno per il NULL restituito. Se la dir esiste probabilmente non hai diritti per accedere
Devi accedere o registrarti per scrivere nel forum
9 risposte