El problema de los break es que en ocasiones hacen mucho más compleja la lectura del código, y el código tiene que ser escrito para que sea óptimo, pero también para que sea leído
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menúecho add 10 > /proc/mimod
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;
}
//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;
}
Cita de: rir3760 en 24 Octubre 2013, 15:18 PM
En este caso una alternativa a strcmp es sscanf (prototipo en <stdio.h>) para verificar si coincide la primera palabra y al mismo tiempo extraer el numero entero. Esa función opera de forma similar a scanf pero en lugar de obtener los caracteres de la entrada estándar utiliza la cadena indicada como su primer argumento.
Por ejemplo:char linea[ALGUN_VALOR];
int numero;
/* ... */
if (sscanf(linea, "add %d", &numero) == 1){
/* comando add */
}else if (sscanf(linea, "mul %d", &numero) == 1){
/* comando mul */
}
Un saludo
int reconocedor(char* str, int* dig){
if(strncmp(str, "add ", 4)==1){
*dig = atoi(str[4]);
return 1;
}else if(strncmp(str,"remove ", 7)==1){
*dig = atoi(str[7]);
return 2;
}else if(strcmp(str,"cat") == 1) {
*dig = -1;
return 3;
}
if(strcmp(str, "sort") == 1) {
*dig = -1;
return 4;
}
*dig = -1;
return -1;
}