2012-04-09 14 views
0

Ich mache ein Modul, in dem ich einige Einträge vom Benutzer nehme und sie in kleinere Strings zerlege und sie in einem Array ablege. Die Logik funktioniert gut, aber nach ein paar Minuten pannelt der Kernel. Nachstehend gebe ich den Code für die Eingabe der/proc-Datei aus dem Benutzerbereich und dann die Codierung im Modul.proc-Eintrag vom Benutzer in kleinere Strings brechen

FILE *fp; 
fp =fopen("/proc/tx_info","w"); 

fprintf(fp,"protocol address  tos payload interface"); 
fprintf(fp,"\n %3s %6s %7d %5d %6s\n",prot,addr,tos,pld,inter); 
fclose(fp); 

jetzt den Code in das Modul

void tx_break(void) 
{ 
char ch; 
char tmp[25]; 
int i =0; 
int k=0,j=0,y = 0; 

ch = tx_buffer[0]; 
//runing the while loop while the ch goes to next line from where the real user entries starts 
while(ch != '\n') 
    { 
     ch = tx_buffer[i]; 
     i++; 
    } 


while(ch != '\0') 
{ 
    j=0; 
//while loop for blanks in between the user entries 
    while(ch == ' ' && ch != '\0') 
    { 
     i++; 
     ch = tx_buffer[i]; 
    } 
//while loop to put the user defined entries to a temporary tmp which would become an entry of 2d array(info.arr[][]) 
    while(ch != ' ' && ch !='\0') 
    { 
     tmp[j] = ch; 
     j++; 
     i++; 
     ch = tx_buffer[i]; 
    } 
    tmp[j] = '\0'; 
    printk(KERN_ALERT"\n%s\n",tmp); 
//putting user entries to an 2d array 
    for(k=0;tmp[k] != '\0';k++) 
     info.arr[y][k] = tmp[k]; 
     info.arr[y][k] = '\0'; 
    printk("the 2d::%s",&info.arr[y][0]); 
    y++; 
    // memcpy(&info.arr[k][0],tmp,j+1); 
    // k++; 
} 
} 

Antwort

0

ich wirklich nicht wissen, wie Sie tx_bufferp so lesen Ich nehme an, Sie auf es alle Informationen aus /proc/tx_info Datei gespeichert haben.

Von hier aus sehe ich einige Fehler:

while(ch != '\n') 
{ 
    ch = tx_buffer[i]; 
    i++; 
} 

Behält ch = '\ n' auf der letzten Ausführung.

Jetzt, mit ch = '\ n', tmp[0] = "\n", speichern Sie es in info.arr[0] und druckt seine Adresse. Sie haben also einen Nicht-Artikel in info.arr gespeichert. Welche Größe hat diese Variable? Vielleicht speichern Sie außerhalb der Grenzen.

In letzter Punkt Verarbeitung, Sie speichern zu \n Charakter in tmp weil while(ch != ' ' && ch !='\0'). Ist das richtig?

Verwandte Themen