Código:
echo add 10 > /proc/mimod
Estalla(NullPointerException). No sé muy bien cómo funciona aún. Aquí asigno los callback
Código:
static int addProcEditor(void){
clipboard = (char *)vmalloc( BUFFER_LENGTH );
if (!clipboard) {
ret = -ENOMEM;
} else {
memset( clipboard, 0, BUFFER_LENGTH );
proc_entry = create_proc_entry("mimod",0777, NULL);
if (proc_entry == NULL) {
ret = -ENOMEM;
vfree(clipboard);
printk(KERN_INFO "modlist: No puedo crear la entrada en proc\n");
} else {
posicionactual=0;
[glow=red,2,300] proc_entry->read_proc = procWritten;
proc_entry->write_proc = procIsRead;[/glow]
printk(KERN_INFO "modlist: Cargado el Modulo.\n");
}
}
return 0;
}
Aquí hago las lecturas y escrituras:
Código:
//Reconoce el cambio del proc y ejecuta este programa
int procWritten( struct file *punterofichero, const char __user *bufferusuario,
unsigned long longitud, void *data){
char* str;
int espaciodisponible = (BUFFER_LENGTH-posicionactual)+1;
if (longitud > espaciodisponible) {
printk(KERN_INFO "mimod: el buffer esta lleno!\n");
return -ENOSPC;
}
if (copy_from_user( &str[0], bufferusuario, longitud )) {
return -EFAULT;
}
clipboard[longitud] = 0;
int num;
int i = reconocedor(clipboard,&num);
switch(i){
case 1://add
add(num);
break;
case 2://remove
myremove(num);
break;
}
return longitud;
}
//Escribe en proc lo que deseemos
int procIsRead( char *buffer, char **bufferlocation, off_t offset,
int buffer_lenghth, int *eof, void *data )
{
int len;
if (offset > 0) {
/* hemos llegado al final */
*eof = 1;
len =0;
} else {
len = cats(buffer);
int num;
}
return len;
}
Cuando va a utilizar cats (lo único que hace es copiar una lista al buffer, peta) y cuando tiene que añadir también. No sé muy bien qué falla. ¿Alguna idea? Lo que puedo suponer es que la cadena recibida no se pasa bien o algo así, pero no tengo ni idea.
Gracias