elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


  Mostrar Mensajes
Páginas: 1 [2]
11  Programación / Java / Re: ¿ Por que los return no deben encontrarse dentro de los bucles ? en: 24 Octubre 2013, 19:31 pm
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
12  Programación / Programación C/C++ / Problemas con Proc en el kernel de linux en: 24 Octubre 2013, 19:16 pm
Buenas, estoy haciendo un módulo que sea una lista de enteros que se actualice cada vez que se actualiza una entrada en proc en concreto /proc/mimod. El caso es que compila y lo instalo en el kernel, y cuando quiero utilizar un comando, (Sólo acepta dos, add y remove), de la forma

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
13  Programación / Java / Re: Optimización programa básico en: 24 Octubre 2013, 18:35 pm
Si los números que utilizas pueden repetirse y tienen alta tendencia a hacerlo, puedes crear una tabla hash que vaya guardando los resultados para cada número, la primera vez que lo ejecutes siempre hará el cálculo, pero a partir de ahí el acceso tiene coste constante.
14  Programación / Programación General / Re: Merece la pena hacer una carrera de programacion? en: 24 Octubre 2013, 18:02 pm
Pero no todo depende de las salidas profesionales que pretendas darle al asunto, también tiene que gustarte obviamente y algo también a pensar si vives en España en los tiempos que corren.

Yo hice un grado superior, no pretendía seguir estudiando, pero me apasionó el mundo de la programación y me metí en el grado de ingeniería informática (Y ya ando por 3º), pero tienes que tener mucha cabeza, porque es más conveniente hacer bachillerato, grado superior y carrera que no hacer bachillerato. Créeme que en primero de carrera lo agradecerás.
15  Programación / Programación C/C++ / Re: Comparación de cadenas en: 24 Octubre 2013, 16:05 pm
Muchísimas gracias, era justo lo que andaba buscando. Ahora sólo me queda aclararme las ideas con las declaraciones estáticas que no me dejan compilar y punto.

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:
Código
  1. char linea[ALGUN_VALOR];
  2. int numero;
  3.  
  4. /* ... */
  5.  
  6. if (sscanf(linea, "add %d", &numero) == 1){
  7.   /* comando add */
  8. }else if (sscanf(linea, "mul %d", &numero) == 1){
  9.   /* comando mul */
  10. }

Un saludo
16  Programación / Programación C/C++ / Re: Comparación de cadenas en: 24 Octubre 2013, 14:32 pm
Gracias a todos. De momento me lo intento apañar con este script, sólo tengo el problema de que atoi no está en kernel, y no sé cómo parsear un entero a dígito en kernel.

Código:
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;
}
17  Programación / Programación C/C++ / Re: Comparación de cadenas en: 24 Octubre 2013, 13:36 pm
Es cierto, lo que yo quería era encontrar algo de ese tipo (He puesto strcmp por poner algo) que pueda comparar que el formato de la cadena se ajuste a eso "add+número" y me devuelva el número.
18  Programación / Programación C/C++ / Re: Comparación de cadenas en: 24 Octubre 2013, 10:11 am
Un profesor me comentó que existía una macro del tipo

char* str = "add 134";

int aux;
strcmp(str, "add %d",aux)

Que devuelve un número igual a 1 si las cadenas son iguales, y guarda en aux el dígito %d, pero por mucho que busco no logro encontrarlo
19  Programación / Programación C/C++ / Comparación de cadenas en: 24 Octubre 2013, 09:43 am
Buenas, este es mi primero mensaje y espero que no el último. Llevo tiempo programando en java y me pasé hace muy poco  a c++ y c, por que mi carrera me lo exigía, así que ahora estoy haciendo mi primer módulo para el kernel de un debian 6, Es una práctica para la universidad y se trata de una lista que guarde y borre elementos de proc y en la que, si se modifica un archivo de  /proc  tiene que reconocerlo y ejecutar el código correspondiente, digamos que se debe añadir un número a la lista, pues el usuario escribirá: echo add 10 > /proc/mymodule. Aún soy muy inexperto con C y tengo un error que seguro es de principiante.

¿Cómo puedo estar seguro de que el formato de una cadena es del tipo: "add 144" o "remove 4"?

Gracias.
Páginas: 1 [2]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines