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++;
}
}