Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Ho risolto ragazzi grazie tante in pratica non mi ero reso conto che nel client visto che funziona come server quando riceve e manda messaggi con i socket ha bisogno di un'altro descrittore socket e in più ho dovuto cambiare fgets con scanf perchè non so ma mi leggeva solo la prima lettere cioè "ls -> l"
Ora però come al solito i guai non mancano mai c'è un'altro problema...in pratica quando l'ho provato la prima volta dopo modificato ha funzionato perfettamente...poi ho provato con altri comandi e all'improvviso mi da questo errore anche con il comando ls che prima funzionava.
Server.c
Codice sorgente - presumibilmente Plain Text
back.h client client.c server server.c
Segmentation fault (core dump creato)
il system funziona bene perchè come si vede il listato della cartella lo fa però ora non crea piu il file temporaneo...ho provato anche come root ma niente non va.... bah i misteri del C ora vedo di risovere quest'altro problema..
Non mi convince molto questo, la seconda riga è tecnicamente inutile perché se strlen(size) funziona, allora vuol dire che nella posizione ritornata c'è gia un terminatore. Probabilmente questo non è vero e strlen dà un valore fuori dal range su cui scrivi, o direttamente strlen causa il segfault.
Ricordo che insieme a readFile avevi una funzione per sapere la lunghezza del file, mi son dimenticato di dirti che c'è un modo migliore di leggere tutto il file e poi fare rewind: devi usare fseek() per spostare il cursore alla fine, poi ftell() ti dirà la sua posizione (che corrisponde alla lunghezza in byte del file) e poi rewind.
Questo è più veloce e non richiede di leggere il file inutilmente.
Seconda cosa, prima o poi devi pensare a come gestire meglio la memoria, per ora tutti i punti che hanno un malloc() non hanno nessun corrispondente per liberare (compreso il risultato di readFile()).
Se dovesse ri accadere il tuo programma quando crasha crea (non lui direttamente) il core dump, che tu puoi analizzare: http://stackoverflow.com/questions/5115613/core-dump-file- ... sempre con gdb per scoprire esattamente in che punto si è bloccato, e con un po' di fortuna anche il perchè.
grazie tante ragazzi della vostra disponibilità... appena torno a casa vedo di modificare e vi farò sapere per quanto riguarda su come gestire la memoria non ho capito tanto bene come fare...potreste farmi capire un pò meglio.... :\
Per curiosità prova a compilare ed eseguire un programma fatto così:
Codice sorgente - presumibilmente C/C++
while (1) {
malloc(4096);
}
Per i primi X secondi non succederà nulla. Poi la ram sarà satura e il sistema operativo dovrà usare l'hdd per mappare le pagine che non stanno in ram e vedrai tutto "scattoso" / "rallentato" finchè il s.o. non ti chiuderà il programma o non allocherà più nulla stabilizzandosi così.
Ultima modifica effettuata da TheDarkJuster il 19/12/2016 alle 0:35
grazie ragazzi mi avete fatto capire molto in queste due cose che nn conoscevo tanto bene... cmq penso che lo riscriverò da capo il codice per pulirlo anche un pò e togliere tutte le cose inutili... ho gia modificato la funzione readFile in questo modo
Codice sorgente - presumibilmente C++
char*readFile(constchar*filename)
{
longint size =0;
FILE*fp =fopen(filename,"r");
if(!fp){
fputs("Errore file\n", stderr);
returnNULL;
}
fseek(fp, 0, SEEK_END);
size =ftell(fp);
rewind(fp);
char*buff =(char*)malloc(size);
if(!buff){
fputs("Errore memoria\n",stderr);
returnNULL;
}
if(fread(buff,1,size,fp)!= size){
fputs("Errore lettura file\n", stderr);
returnNULL;
}
fclose(fp);
return buff;
}
credo che così vada bene... ora non mi resta che provare a implementare questa funzione e vi farò sapere
(PS: OFF-TOPIC questa funzione readFile l'ho provata in questo modo vedete se va bene così (non voglio andare off-topic ma voglio solo sapere se in questo modo viene liberata la memoria :\):