Menú

Mostrar Mensajes

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ú

Temas - SARGE553413

#46
Scripting / Duda con bufferedreader python
15 Febrero 2014, 03:27 AM
Hola a todos.

Uso Python 3.3.4.

Estoy haciendo una clase que lee líneas de un fichero.
Al constructor de esta clase le paso un parámetro llamado "reader". En el constructor de clase compruebo que el parámetro que me pasan es de tipo "reader", si no lo es, lanzo excepción.

Mi problema es que, no se por qué, el programa me da error cuando intento hacer el primer "readline()".

El error que me sale es:
Traceback (most recent call last):
  File "D:\Mis documentos\workspaces\Cosas\asd\p2.py", line 13, in <module>
    x = bf.readline()
AttributeError: '_io.TextIOWrapper' object has no attribute 'readinto'


¿Alguien me puede explicar que ocurre? gracias. Adjunto el código:


import threading
import io

class FileThread(threading.Thread):
    def __init__(self,reader):
        #aqí compruebo que es un BufferedReader
        if not (type(reader)==io.BufferedReader):
            raise AttributeError;
        self.n=0;
        self.m=0;
        self.s="";
        self.ls="";
        self.reader=reader;
        self.flag=False;
   
    def __largerLine(self):
        #El error ocurre en la siguiente linea
        self.s=self.reader.readline(); #ERROR
        self.ls=self.s;
        while(self.s):
            self.n=len(self.s)
            if(self.n>self.m):
                self.m=self.n;
                self.ls=self.s;
            self.s=self.reader.readline();

    def getLargerLine(self):
        return (None,self.ls)[self.flag]
   
    def run(self):
        self.__largerLine();
        self.flag=True;
   

#PRUEBAS:
fich = open("pr","r");
reader = io.BufferedReader(fich)
ft = FileThread(reader);
print(ft.getLargerLine())
ft.run();
l=ft.getLargerLine()
print(l)


#47
Scripting / Duda con print en python
14 Febrero 2014, 01:21 AM
Hola a todos.

Tengo un problema con python versión 3.3.4 en eclipse (windows 8.1).

Intento escribir una linea sin salto de linea al final, para ello hago:
print("una linea", end="")

En eclipse eso se ejecuta bien, pero su plugin para python (pydev) me da un error:
Me sale la típica equis roja al lado de la línea con error , antes de ejecutar. Pero repito que se ejecuta bien.

¿Puedo hacer algo para arreglarlo? ¿Es un "bug" de pydev que tengo que esperar a que arreglen?

Gracias.

PD. usando el intérprete de python 3.3.4 desde la consola, por supuesto funciona bien.
#48
Scripting / duda de novato con perl
11 Febrero 2014, 02:51 AM
Hola a todos.

Estoy intentando aprender un poco de perl, para ello estoy leyendo varios manuales etc. por internet.

Bien mi duda es sobre como usar local. Entiendo para que sirve, he intentado usarla de todas formas posibles y siempre meda en mismo error:
"Global symbol "..." requires explicit package name at stringanimal.pl line 3".
Incluso he copiado código que he encontrado googleando y nada.

Mi pregunta es entonces cómo se usa "local".
Y lo mismo para variables que no son ni local ni my? (sin nada)

Gracias.
#49
Java / Duda con respuesta html
2 Febrero 2014, 23:00 PM
Hola a todos.

Tengo que hacer un programa que acceda a una pagina web de autobuses y solicite el horario de los autobuses que van de la ciudad A a la ciudad B.

Se como conectarme a la página web, lo que no se es como solicitar esa información.
Es decir, lo que no sé es, a partir del index.html de la web (que es lo único que tengo), como se que peticiones get o post tengo que hacer.
He intentado comprobar si tiene servicios escribiendo la url y al final "?wsdl" pero nada.


EDITO:
Usando wireshark he conseguido la "url" de la petición.
La respuesta es correcta. El problema es que es en formato html, por tanto sacar de ahí la info es complicado. (por no decir imposible, porque cambiará en sucesivas peticiones)
Mi duda ahora mismo es si se puede conseguir la respuesta en xml, y siendo así, ¿como?

¿Alguien me ayuda?
#50
GNU/Linux / Drivers en linux [SOLUCIONADO]
30 Enero 2014, 18:28 PM
Hola a todos.

He estad buscando bastante rato algún manual/tutorial de programación de drivers en linux (con C).

El caso es que el UNICO que he encontrado un poco extenso en español, es del 2001 ( y tampoco es muy extenso), no se si fiarme mucho de éste manual.

¿Alguien conoce o tiene algún tutorial/manual al respecto?

Gracias.
#51
Hola, este es mi problema:
Intento redirigir la salida estandar a un fichero para escribir DESDE EL FINAL de éste:

int stdoutRedir2(const char *fichName){
    int fd=open(fichName,O_APPEND);
    int nuevoFd=-1;
    if(fd<1){
        fd=creat(fichName,0644);
    }else{
        nuevoFd=dup2(fd,1);

    }
    close(fd);
    return nuevoFd;
}


"error de escritura: Descriptor de archivo erróneo"

¿Alguien sabe por qué?
#52
Hola a todos.

Tengo que hacer un programa en c++ que ejecute cualquier nº de mandatos de la shell encadenados por tuberías. He conseguido hacerlo para una sola tubería, y para 2, pero cuando paso al caso general ('n' tuberías no consigo que funcione).

Os adjunto el código:


/**
   Ejecuta los mandatos de la lista 'args' encadenados por tuberías.
   'fd' vector de descriptores
       inicial (se crea en el main y se le pasa a este metodo)
   'i' número de iteraciones que llevo hechas. Con cada nuevo proceso
       creado, se incrementa en 1.
   'max' número de mandatos en el vector de argumentos ('args')
**/
int p1(char *args[],int fd[],int &i,const int &max){
   //Voy a ejecutar un mandato, incremento i.
   i++;
   //Creo la tubería para el siguiente proceso.
   pipe(fd);
   //Creo el proceso
   int pid=fork();
   switch(pid){
       case -1:
           //si hay error....
           exit(-1);
       case 0:
           //Soy el proceso hijo, lo que hago es:
           //Creo otro vector de descriptores (para la tubería
           //que mi hijo tendrá que heredar.
           int fd2[2];
           //Redirecciono mi salida estándar para que mi
           //padre pueda leer la salida del mandato que voy
           //a ejecutar
           outRedir(fd);
           //Si no soy el proceso que va a ejecutar el último mandato:
           if(i<max){
               //Repito lo anterior para crear mi tubería, mi proceso hijo etc.
               p1(args,fd2,i,max);
           //Si soy el proceso que va a ejecutar el último mandato:
           }else{
               //Ejecuto y salgo
               execlp(args[max-1],args[max-1],NULL);
               exit(0);
           }
           break;
       default:
           //Soy el proceso padre (pero era el hijo en la anterior llamada
           //recursiva)
           //Redirijo entrada
           inRedir(fd2);
           //ejecuto
           execlp(args[i-1],args[i-1],NULL);
           exit(0);
   }
}

/**
   Dado un vector de descriptores:
       -Cierra el extremo de escritura
       -Redirige stdin al extremo de lectura de la tuberia
       -Stdin ya redireccionado, cierra el extremo de lectura
**/
void inRedir(int fd[]){
   close(fd[1]);
   dup2(fd[0],0);
   close(fd[0]);
}

/**
   Dado un vector de descriptores:
       -Cierra el extremo de lectura
       -Redirige extremo de escritura a stdout
       -Stout ya redireccionado, cierra el extremo de escritura
**/
void outRedir(int fd[]){
   close(fd[0]);
   dup2(fd[1],1);
   close(fd[1]);
}


Muchas gracias.
#53
Desarrollo Web / Duda con xquery
19 Enero 2014, 16:29 PM
Hola a todos.

Tengo una duda acerca de una xquery que no se hacer. El esquema xml es este:

link a la imagen: http://imagizer.imageshack.us/v2/800x600q90/716/mj4a.png

La xquery que tengo que hacer es la siguiente:

"Autores que hayan escrito mas de un libro en la misma editorial"

Yo he intentado esto, pero no se si funciona (no tengo el documento xml ni tampoco ningun programa para probarlo):


//1
<sol>{
for $i in //autor/../editor[count(/../libro)>1]
return $i
}</sol>

//2
<sol>{
for $i in //autor,
$j in //editor
where $i/../editor=$j and
count($i/..)>1
return $i
}</sol>


Dudo mucho que alguna de las dos esté bien.

¿Me puede ayudar alguien por favor?

Muchas gracias.
#54
Hola a todos.

Estoy leyendo un pequeño documento acerca de las nuevas caracteristicas de C++11
link: http://www.eiic.ulpgc.es/documentoscongresos/Francisco%20Palomo-Inmaculada%20Medina.pdf

El caso es que, por lo que veo, la característica mas potente y compleja es la semántica de movimientos. Si lo he entendido bien, esto incide directamente en el rendimiento del código (haciéndolo mucho mas eficiente). (¿es mucho más, o poco más?)

El caso es que lo leo y releo y no consigo entenderlo.
Explico lo que "creo entender":
1 - Sé lo que es un r-value, entiendo que siempre se almacenan en la stack.
2 - Creo entender que la idea del move semantics es "mover" un r-value de la stack al heap.
¿¿¿ Esto se consigue asignando la direccion de memoria de nuestor r-value (que esta en el stack) a un puntero que está apuntado a una dirección del heap???

Cito la explicación que dan:
Estas referencias, distintas de las habituales, se construyen con &&, en lugar de &.
Las referencias && pueden ligarse a un temporal y permiten su modificación.
...
Por lo tanto, es posible incluir en las clases constructores y operadores de asignación que
reciban referencias a valores «r». En el caso de un contenedor que posea un puntero
a memoria dinámica, su función sería encargarse de «mover» la memoria reservada en
el temporal al objeto destino que está siendo construido o asignado.
(WTF?!?!?)

¿Puede alguien explicarme esto por favor? no lo consigo entender.

Muchas gracias.

PD. ¿cuál es el motivo por el cual el compilador no puede conseguir el move semantics por si solo?
#55
Hola a todos, en otro post que escribí se mencionó algo sobre esto, resumiendo: que los compiladores hoy día son tan avanzados que optimizan el código igual o mejor que un programador.
Escribo en un post nuevo porque este tema no tiene nada que ver con el post del que he hablado arriva.

Dicho esto, mi pregunta es:
1 - A parte del hecho de que lenguajes como C,C++ al compilarse pasan a lenguaje máquina, ¿Su "compelgidad extra" puede aportar alguna mejora significativa del rendimiento con respecto a otros lenguajes de mas alto nivel como Java?
Es decir, si no podemos optimizar el código de C++ utilizando todas su posibilidades de "mas bajo nivel", porque el compilador ya optimiza hasta tal punto que (casi) no se puede mejorar, no es lo mismo hacer el programa en otro lenguaje de mas alto nivel? Porque el algoritmo va a se el mismo para los dos...
Porque lo que hace el compilador de C++, lo puede hacer el de java, y lo puede hacer el de cualquier otro lenguaje (compilado), ¿cierto?

Gracias de antemano.

PD. si hay tiempo, una novedad de C++11 es la semántica de moviemientos. Quizá me equivoque pero por lo que he leído es bastante potente. Mi pregunta es si esto lo consigue solo C++ o también los lenguajes de mas alto nivel como java etc.
#56
Programación C/C++ / Duda con heap, stack
8 Enero 2014, 20:43 PM
Hola a todos.

He estado leyendo acerca del modelo de memoria de C++, para saber bien como funciona el lenguaje y sacarle mas rendimiento a los programas.
http://www.zator.com/Cpp/E5_1_5.htm

Lo mas importante que he entendido hasta ahora, es que las variables locales automáticas van a la pila(stack) y el resto al montón(heap). La pila es manejada directamente por la UCP, ¿ésto implica mas velocidad? ¿Son realmente los movimientos en la pila considerablemente mas rápidos que en el montón?

Dicho esto, he leído que al declarar variables automáticas estas son creadas en la pila o en un "registro". ¿Ese "registro" es un registro de procesador?

Si tengo una clase "A" creada por mí con un constructor sin params., si hago:

A a();
A *b=new A();
...


¿Los accesos al objeto 'a' serán mas rápidos que los accesos al objeto 'b'?

Muchas gracias.
#57
Java / Problema con hilos
28 Noviembre 2013, 16:47 PM
Hola a todos, planteo mi problema.

Tengo un hilo A. Desde éste creo otro hilo B (hijo de A por tanto).
El hilo B lee datos de teclado, por tanto está bloqueado esperando a que alguien teclee algo. (*1)
Entonces el hilo A quiere terminar la ejecución del hilo B (estando este bloqueado, esperando a que alguien teclee)

¿Como puede A terminar la ejecución de B?

Muchas gracias.

(*1) Es decir, está en el punto "String s=sc.nestLine()" con sc=new Scanner(System.in)
#58
Hola a todos.

Tengo un vector de punteros a char.
Quiero leer todas las líneas de un fichero y almacenar cada una de ellas en cada componente de mi vector de punteros.
No conozco a priori el tamaño del fichero.

El problema es que, no se por qué, al redimensionar el vector de punteros voy perdiendo las cadenas almacenadas. Este es mi código:


#define readErr(ifs) ifs.rdstate() & ifstream::failbit

char ** readFich(ifstream &ifs,const int &BUFFER_S){
char line[BUFFER_S];
char **dev=new char*[1],**aux=NULL;
//dev = vector de strings donde almaceno cada linea del texto.
//aux = var. auxiliar para apuntar a dev mientras ésta es redimensionada.
int i=1;
//leo línea
ifs.getline(line,BUFFER_S);
       //la copio en el vector
       dev[i]=new char[BUFFER_S];
       strcpy(dev[i],line);
       while(!ifs.eof()){
       //Compruebo que no hay errores, si los hay, salgo del bucle.
       if (readErr(ifs)!= 0){
           cout<<"ERROR: INTENTANDO LEER MAS DE 256 CARACTERES"<<endl;
           break;
       }else{
           //libero la memoria a la que apuntaba aux
           delete[] aux;
           //salvo la direcc. de memoria de dev
           aux=dev;
           //redimensiono dev
           dev=new char*[i+1];
           //le paso los datos que tenia hasta ahora
           memcpy(dev,aux,sizeof(aux));
           //le asigno la nueva linea
           dev[i]=new char[BUFFER_S];
           strcpy(dev[i],line);
           //vuelvo a leer
           ifs.getline(line, BUFFER_S);
       }
       i++;
   }
   return dev;
}


No entiendo cual es el problema, ¿Qué puedo hacer?

Muchas gracias
#59
Programación C/C++ / Ayuda C++11 [SOLUCIONADO]
12 Noviembre 2013, 00:39 AM
Hola a todos.

Estoy intentando aprender las nuevas características de C++11 (que por lo que veo son muchísimas)

El caso es que la información que he encontrado es bastante "escueta" en cuanto a explicaciones (por ej. explicando clases movibles pero no copiables).

Mi pregunta es si alguien conoce alguna web, libro ... cualquier cosa que sea como un "tutorial completo" de C++11

Gracias.
#60
Hola a todos. He estado leyendo acerca de las nuevas características de C++11, en especial sobre las referencias a rvalues y la mejora de rendimiento que consigue con los constructores de movimiento etc. Mi pregunta es si esta optimizacion la puede conseguir por si solo un compilador o si siempre hay que hacerla a "mano", y siendo así, como implementarla en java y demas lenguages de mas alto nivel (si es que es posible)

Saludos.
#61
Hola a todos.

Mi pregunta es como puedo compilar C++11 con mingw (4.7) de codeblocks.
Ya he añadido en settings>compiler>other settings>compile output to be ignoded
-std=c++11 y -std=c++0x pero sigue sin funcionar.

¿Qué puedo hacer?

Muchas gracias.

PD. para verificar que estoy en c++11 declaro una variable auto y le asigno valor:
' auto i = 1 ' ; y esto no compila.
#62
Programación C/C++ / Problema visual C++
5 Septiembre 2013, 14:38 PM
Hola a todos.

He instalado este IDE junto con marmalade, el problema que tengo es que al ejecutar cualquier cosa con marmalade me salta un error que dice que no tengo "msdev.exe".
He estado mirando por google, y por lo visto es algo que el visual studio debería haber instalado normalmente. He intentado descargarlo pero no esta por ninguna parte.

¿Alguien sabe que puedo hacer?

Gracias.
#63
Hola a todos.

Quiero crear una GUI que muestre el árbol de directorios, y los subdirectorios de estos según se vaya desplegando.

En lugar de crear todo el árbol de golpe (demasiado costoso), lo que quiero es que al darle a desplegar "C:/" por ej., en ese momento se creen los nodos pertinentes y se muestren.

Lo he intentado hacer pero como el nodo raíz (C:/) al inicio está vacío, el método que tengo para caputar el TreeExpansionEvent no hace nada (aparte de que no estoy seguro de que funcione bien). ¿Qué puedo hacer?

Muchas gracias.

PD.adjunto el código:


public class DirectoryTree implements TreeExpansionListener{
   
   /* Atributos necesarios: */
   DefaultMutableTreeNode root;
   DefaultTreeModel model;
   JTree dirTree;
   
   /* COnstructor: */
   public DirectoryTree(){
       root=new DefaultMutableTreeNode("C:/");
       model=new DefaultTreeModel(root);
       dirTree=new JTree(model);
   }
   
   /* Devuelve el JTree para poder pasarselo a JScrollPane */
   public JTree getTree(){
       return this.dirTree;
   }

   @Override
   public void treeExpanded(TreeExpansionEvent event) {
       TreePath tp=event.getPath();
       Object aux2[]=tp.getPath();
       String aux="";
       for(int i=0;i<aux2.length;i++){
           aux=aux+"/"+((DefaultMutableTreeNode)aux2[i]).toString();
       }
       addFolders(aux,this.model,this.root);
   }

      private static void addFolders(String path,DefaultTreeModel m,DefaultMutableTreeNode root){
       File fil=new File(path);
       if(fil!=null){
           String aux[]=fil.list();
           for(int i=0;i<aux.length;i++){
               m.insertNodeInto(new DefaultMutableTreeNode(aux[i]), root, i);
           }
       }
   }

public static void main(String args[]){
       JFrame frame=new JFrame();
       DirectoryTree dt=new DirectoryTree();
       JScrollPane jsc=new JScrollPane(dt.getTree());
       frame.getContentPane().add(jsc);
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       frame.pack();
       frame.setVisible(true);
   }

#64
Hola a todos, intentaré ser lo mas conciso posible.

He leído y comprobado que en java no se puede hacer un cast de una superclase a una subclase, así que me propuse intentarlo en C++:

Al intentarlo observo que con static_cast, reinterpret_cast y al estilo C, compila y ejecuta, pero efectivamente los nuevos atributos de la clase derivada no son inicializados (yo pensaba que con estos castings se haría llamada al constructor apropiado, pero no es así). Obviamente, no funciona como debería.

¿Como puedo hacer para poder castear la superclase a una subclase con dynamic_cast y que todo se inicialice bien?

PD.
No se si se podrá pero, ¿sobrecargando dynamic_cast de alguna manera?

He intentado sobrecargar el operador '=' para que al hacer la asignación todo funcione bien. El problema ha sido que lo he hecho con referencias, para conseguir lo que quiero ¿tienen que ser punteros a la fuerza porque necesito polimorfismo?:
(El operador '=' hará cosas distintas si hago 'SuperClase=SuperClase' que si hago 'SuperClase=SubClase')


#65
Programación C/C++ / Duda con sockets C
17 Julio 2013, 02:55 AM
Hola a todos.

Estoy aprendiendo a usar sockets en C. (UNIX)

Ya he conseguido hacer un servidor concurrente sin fijarme en ningún ejemplo pero me ha surgido un problema:

Para hacerlo concurrente uso fork(), tengo configurado el server para que lea datos del cliente hasta que éste le envíe un '-1'. Cuando los recive los saca por pantalla y los reenvia. Hasta aquí todo bien, pero el problema es que si finalizo el cliente en lugar de con un '-1' con "ctrl+c", el server entra en bucle infinito, no para de escribir el último mensaje que recibió del cliente.

Por ello he buscado formas de comprobar el estado de un socket, he encontrado la función select(), pero por lo que entiendo ésta comprueba el estado de los descriptores desde el 0 hasta el que le indiquemos menos uno. Yo necesito algún método que permita comprobar el estado de un solo descriptor.
¿Cómo puedo hacerlo?

Muchas gracias.

PD. No subo el código porque es bastante largo, si hace falta decidme y lo subo, o decidme como poner un spoiler que no sé xDD.
#66
Hola a todos.

Discutía con un amigo sobre si merece la pena estudiar seguridad informática.
Éste está haciendo CFGS de informática (no se exactamente cual). El caso es que tiene un compañero que lleva desde pequeño interesándose por temas de seguridad, hacking etc. y debe de saber bastante. Dice que en clase de seguridad, este chaval sabe bastante mas que el profesor porque muchas veces le corrije etc. y que por eso cree que no merece la pena, porque probablemente los profesores no tendrán sus conocimientos actualizados etc.

Mi pregunta es si esto mismo es probable que pase estudiando un máster en seguridad informática, (en lugar de CFGS), de tal manera que no merezca la pena pagar lo que cuesta, y salga mejor ser autodidacta o estudiar por tu cuenta para las certificaciones.

PD. Las certificaciones (en el caso de la seguridad informática) sustituyen al máster o ambos pueden complementarse?

Gracias.
#67
Hola a todos.

Mi problema es que al usar gethostbyname() con algún nombre como "www.google.es" o cualquier url, luego el hostent que devuelve la función tiene mal puesta la IP, me explico:

Pongo "nslookup www.google.es" y me sale que su ip es 192.168.0.1 por ej.
Pero si hago "gethostbyname("www.google.es");" y luego saco por pantalla la lista de ips de la url en cuestión me salen caracteres chungos y cosas así.

¿Como se puede conseguir la direcc. IP de una url con C/C++?

EDITO: corregidme pero por lo que entiendo, de cara al eexterior google tendrá una direcc. IP y un puerto (por el protocolo NAT), en ese caso mi problema es que me estoy conectando a la IP que no es? De ser así, ¿como puedo conectarme a una IP/puerto con C?

Gracias.
#68
Hola a todos.

Mi duda es acerca de si, sabiendo C/C++ y Java (mas de c/c++), se puede programar en Arduino (proccesing creo) sin saber nada mas.
El motivo es por una oferta de trabajo.

Muchas gracias.
#69
Programación C/C++ / Duda con structs C/C++
21 Junio 2013, 01:45 AM
Hola a todos, expongo mi duda:

Tengo que usar la función gethostbyname(), que devuelve un struct hostent*. El problema es que este puntero está declarado como static, por tanto esta función devuelve SIEMPRE la misma dirección de memoria. Por tanto en sucesivas llamadas se van "pisando" datos. Quiero conseguir que ésto no pase.

La solución que se me ocurre es hacer otra función que "construya" otro hostent* no static, copiarle los valores y devolverlo.

Mi pregunta es si C/C++ tiene algún mecanismo para copiar estructuras (hacer "a=b" no me vale porque así se copian las direcciones de memoria).

Gracias.
#70
Programación C/C++ / Duda con hostent C
19 Junio 2013, 15:37 PM
Hola a todos, estoy intentando aprender a programar con sockets en C (en unix), ye he leído documentación y he hecho algún pequeño programa cliente-servidor para probar y tal.
Ahora quiero hacer una serie de pequeñas clases para encapsular las estructuras de sockets en C (in_addr, sockaddr, hostent etc.) (el objetivo es meramente didáctico)

Mi duda es con esta última: hostent.

Buscando por google y demás, he leído que se utiliza para extraer información del host remoto, y que se usa mas como cliente que como server.

Entonces mis dudas son:
Si un cliente se puede conectar a un server sin hacer uso de hostent.
Si al usar 'gethostbyname()' ese método ya comprueba el nombre de host que le pasamos existe. De ser así, ¿lo hace mediante petición DNS? También funciona si se le pasa directamente la IP, en este caso, ¿también habría petición DNS?

Muchas gracias.
#71
Hola a todos, expongo mi duda:

Tengo un método, que lo que hace es que si lee determinado carácter (pongamos '<') tiene que crear un proceso hijo y redirigir la entrada de datos (cin) a un determinado fichero.

Bien esa parte ya la se hacer, mi problema es que al volver al main, (a pesar de haber hecho la redirección en un un proceso hijo, que tal como yo lo veo al volver al main debería estar muerto),
tengo un bucle en el que tengo un cin.getline, pero éste en lugar de esperar a que yo escriba por teclado,
avanza sin parar, sin dejarme escribir, y entonces nunca puedo salir del bucle.

¿Alguien me puede ayudar por favor?

Muchas gracias.

PD.: la entrada la redirijo a un fichero, ("1A").


int main(int argc,char* argv[]){
char* lElements[100];
int i=0;
if(argc==2){
ifstream fich;
fich.open(argv[1]);
if(!fich.fail()){
char** c=readFich(fich);
while(c[i]!=NULL){
trocear_linea(c[i],lElements);
ejecutar(lElements);
i++;
}
fich.close();
}
}else if(argc!=2){
char linea[100];
pwd();
cin.getline(linea,99,'\n');
while(strcmp(linea,"salir")!=0){
prueba();

pwd();

cin.getline(linea,99,'\n');
}
}
exit(0);
}

void pwd(){
int n=fork();
switch(n){
case -1:
cout<<"ERROR"<<endl;
break;
case 0:
execlp("pwd","pwd",NULL);
break;
default:
wait(NULL);
break;
}
}

void prueba(){
int n=fork();
switch(n){
case -1:
cout<<"ERROR"<<endl;
break;
case 0:
int fd,fd2;
fd=open("1A",O_RDONLY);
close(0);
fd2=dup(fd);
close(fd);
char l[100];
cin.getline(l,50);
break;
default:
wait(NULL);
break;
}
}
#72
Redes / Duda con prefijo de red
17 Mayo 2013, 15:03 PM
Hola a todos.

Estoy en una residencia en la cual se asignan 2 IPs estáticas a cada residente (una para el pc y otra para el smartphone) para conectarse a internet. Además la máscara de red que hay que poner en el pc es 255.255.0.0.

Hasta donde yo se, eso indica que la longitud del prefijo de red es 16.
(16 unos ¿cierto?)

El caso es que al poner la pass, ip etc. en la conexión del smartphone, si pongo en el campo "longitud de prefijo de red" el número 16 no funciona, sin embargo con el 24 sí. (¿Pero el 24 corresponde a la máscara 255.255.255.255 no?)

Mi pregunta es por qué pasa esto.

Muchas gracias.

EDITO. Una observación, en dicha residencia hay 5 redes: residencia1 ... residencia5. Solo funcionan la 1 y la 5, y he comprobado que: (al conectarme con el smarphone NO EL PC)

La residencia1 solo admite prefijo de red = 24 y tiene seguridad wpa2 psk.
La residencia5 admite prefijo de red = 16 y tiene seguridad wep.

(Ambas conexiones con la misma puerta de enlace predeterminada, misma IP, sin utilizar proxy, y con la misma pass obviamente)

Para colmo, en el pc me conecto a la residencia1 con mascra de red 255.255.0.0, concetado a la misma con el smartphone (con IPs distintas por supuesto, a la misma puerta de enlace) o pongo prefijo de red 24 o nada.

¿Me puede explicar alguien esto por favor?
#73
Hola a todos.

Mi pregunta es si existe realmente alguna diferencia entre vacuna y antivirus.

¿Existe algún virus tan complejo como para que haya que desarrollar un programa específico para eliminarlo ?(si los antivirus no pueden en ese momento)

Una persona con estudios sobre seguridad informática (máster, acreditaciones) ¿podría dar el perfil para trabajar desarrollando antivirus o esto es solo para Ing. de software?

Muchas gracias.
#74
Hola a todos.

Tengo una clase plantilla que como atributos tiene una matriz (T **m) y 2 enteros
(int m, int n). (Defino así la matriz porque si no el compilador me da fallo, creo que por el parámetro, tampoco me deja haciendo T *x[])
He leído que para clases que tienen atributos que son mas complejos que vectores (matrices, grafos etc) hay que definir el destructor porque éste por si solo no sabe que hacer ante dichas estructuras.
El caso es que lo estoy intentando implementar pero haga lo que haga siempre me da error, esto lo que he hecho, y no entiendo por qué no funciona:


private:
     T **x;
     int m,n;
     //.......
     //.......
public:
      A::~A()
     //.......
     //.......
template <class T>
A::~A(){
for(int i=0;i<this->m;i++){
delete[](this->x[i]);
}
delete[]this->x;
delete& this->m;
delete& this->n;
}


¿Como habría que hacerlo?

Muchas gracias.
#75
Hola a todos.

Tengo una duda con el failbit de ifstream:

Mi duda es que para comprobarlo, en los ejemplos que he visto, escriben:
if ( (entrada.rdstate() & ifstream::failbit ) != 0 ){ .... }
He leído la especificacion en cplusplus.com, pero no entiendo que significa el trozo de
'& ifstream::failbit ', es decir, ahí el '&' ¿es un operador de comparación o algo así?
¿Cómo funciona?

Muchas gracias.
#76
Hola a todos.

Me he bajado la última versión del dev-cpp porque en windows 8 no funciona otra, también he probado la típica solución de bajarme el portable y tampoco.

El caso es que esta versión se que a otras personas les ha funcionado en windows 8, a mí no.

Mi problema es que, no se por que, intento acceder a los métodos de una clase y el compilador me dice que no son funciones de dicha clase, sin embargo si que me deja acceder a los constructores de clase y usarlos perfectamente.

Para no complicarle al compil. he puesto todo el código en un *.h, primero la declaración #ifndef ... #define... class A{}; #endif y debajo todos los métodos, como si estubiese usando templates o inlines.

Aun así nada, alguien me puede ayudar por favor? Muchas gracias.
#77
Hola a todos.

Tengo un problema, no se por qué al reservar espacio para una matriz dinámica se me de-reserva el espacio de un vector dinámico previamente reservado:

Muestro el código.



class Graph{
      private:
              int *nodes;
              int **nears;
              int *nNears;
              int nNodes;
....
};

inline void Graph::addArist(int o,int d){
    int n=this->search(o);
    if(n!=-1){
        if(this->nNears[n-1]==0){
            int aux=this->nodes[n-1];
            this->nears[n-1]=(int *)calloc(1,sizeof(int));

            //tras ejecutar esta instrucción, la componente n-1 de 'nodes' deja de //tener su valor original para tener números raros, y si intento reasignarle el valor //a nodes[n-1] el programa falla. No lo entiendo

            (this->nears[n-1])[0]=d;
        }else{
            int *aux=(int *)realloc(this->nears[n-1],(this->nNears[n-1]+1)*sizeof(int));
            this->nears[n-1]=aux;
           
            (this->nears[n-1])[this->nNears[n-1]]=d;
            this->nNears[n-1]++;
        }
    }
}



PD. Lo hago con calloc en lugar de new para poder usar realloc.

Muchas gracias
#78
Hola a todos.

Mi pregunta es como puede uno interactuar con una página web desde una aplicación java a base de sockets. Establecer la conexión ya se, pero supongamos que estamos hablando de una web que es un foro, navegar por los distintos sub-foros es sencillo debido a que los botones que te llevan a ellos son urls, de tal manera que es tan simple como copiar y pegar, pero yo me refiero a como logear o enviar un post por ej, que son botones que no tienen url.

Quiero saber como simular ese "click de ratón".

Muchas gracias.
#79
Hola a todos.

Planteo el siguiente problema, tenemos un servido del cual conocemos solo la IP.
Queremos conectarnos a el.

Para ello necesito, dado un String con su ip (por ej: "192.168.0.127"), necesito pasarlo a un vector de bytes (byte[4]).

A parte de que esto no se hacerlo, java representa los byte desde -128 hasta +127, por tanto el 192,168 etc. no caben en el byte. Tampoco permite realizar operaciones aritméticas con ellos.

¿Qué puedo hacer?
Muchas Gracias.

PD. el objetivo final es conectarse a un servidor remoto dada su IP, si hay otra manera de hacerlo también me vale.
#80
Hola a todos.

Quiero desarrollar excepciones en C++ que tengan un método similar al "printStackTrace" de java (muestra por pantalla el "historial" de llamadas a funciones que han generado la excepción)

Se que para hacer esto (en windows) necesito usar la libreria Stackwalker.h pero al intentar hacer el include el compilador me dice que no la encuentra.

He estado buscando por internet etc. y no encuentro por ninguna parte donde descargarla, ¿alguien me ayuda por favor?

Muchas gracias.
PD.  utilizo visual c++ 2008 express
#81
Hola a todos, expongo mi duda:

Tengo dos clases A y B, ambas tienen por un lado su fichero de cabecera ("A.h") y su fichero de definición o como lo queráis llamar ("A.cpp"). Por tanto están en ficheros separados y se enlazan con includes.

Lo que quiero es definir un método en la clase B que pueda acceder a los atributos private de la clase A, y para ello voy a usar un método friend pero no se como enlazar los ficheros para que se pueda hacer. Quiero hacer algo como:


//Dfinicion de la clase B:
....
....
void B::metodoEnCuestion(A *a){
     a->n=25;
}


//Declaracion de la clase A:
....
private: int n;
....
friend void B::metodoEnCuestion(A *);
....


He buscado en varias webs y en google, y encuentro cosas de métodos friend pero no encuentro como hacerlo con 2 clases en distintos ficheros con includes.

El caso es que lo he intentado de varias maneras pero no se como hacerlo, me ayuda alguien por favor?

Muchas gracias.

#82
Hola a todos.

Mi problema es que he instalado windows 8 y no hay manera de hace que Dev-C++ funcione. El error que me da es el siguiente:

   Interrupt/Exception caught (code = 0xc0000005, addr = 0x76daef28)

Pero lo raro es que los archivos fuente normales si los compila, pero si abro un proyecto o hago uno nuevo entonces me da ese error, y a mí me hace falta usar proyectos

Ya he intentado: bajarme e instalar el wxdev-c++, actualizar el compilador, utilizar otro compilador distinto, actualizar todo el Dev-c++, probar a poner en el path todas las rutas habidas y por haber a los compiladores (a su carpeta bin).

Tambien he probado con las versiones portables que he leído que sí funcioan y los mismo, funcionan si no haces proyecto.

Estoy desesperado, me puede ayudar alguien por favor?

Muchas gracias.
#83
Hola a todos.

Como digo en el título estoy estudiando G. Ing Informática, no es que no me guste, de hecho me encanta, pero me estoy planteando el dejarlo por el tema de que no es una profesión regulada (cosa que creía entender, pero que no es como yo pensaba).

El caso es que me planteo el dejarla porque hace poco leí la ley de servicios profesionales de 2012, en la que se dice, básicamente, que cualquier ingeniero puede firmar cualquier proyecto. La cosa es que seguidamente me entero de que si para cuando la cosa llegue a Europa, si la Ing Infor. no está regulada, ya ni si quiera lo estará en Europa, de hecho digamos que los ing. informáticos europeos lo serán también en España, pero lo españoles en Europa no.
Yo se que en España los ingenieros informáticos son tratados a zapatazos, contaba con ir a trabajar a Europa como tanta gente de cualquier profesión, pero ahora me salen con estas, es que no vamos a tener a donde ir ya. -->  http://indalics.com/blog/ingenier%C3%ADa-inform%C3%A1tica-en-alerta-modificaci%C3%B3n-de-la-directiva-eu-de-cualificaciones

Quiero saber sobre todo si estoy literalmente en lo cierto, también, ya que estoy aún en segundo de carrera con alguna de primero, que posibilidades veis de que cuando acabe la cosa haya cambiado para mejor.
Sobre todo lo digo porque se que en 2008 estuvimos a punto de ser profesión regulada, que el PP estaba a favor y el PSOE en contra, y yo quisiera saber si hay posibilidades, ahora que está gobernando el PP, de que retomen esa historia.

Muchas gracias, espero que responda alguien, porque estoy bastante preocupado ahora mismo.

PD. Por favor, se en que consiste que la Ing Informática no esté regulada, así que por favor abstenerse de empezar a explicarlo en este post, a no ser que sea para informar a otra persona ,porque para mí es llover sobre mojado.
#84
Hola a todos.

Parece que esta duda esta archicontestada, pero he buscado en google 1000 ejemplos y no ha funcionado ni uno, así que os pregunto a vosotros.

Tengo una clase template con este método:

template <class T>
class Lista
{
    private: int nElementos;
    private: T ** ptr;  //vector "dinámico" de punteros a objetos clase T
    ......
    Lista(int n); //Constructor de lista de n elementos
    ......
    void setElemento(T *,int n);  //Poner un elemento en la posicion 'n'
    ......
    ......
}

//y en el he probado todo esto:

int main()
{
      Lista <int> *L1=new Lista<int>(3);
      Lista <int> L2(3);
      int a=2;
      L1->template setElemento<int>(&a,1);
      L1->setElemento<int>(&a,1);    
      L2.template setElemento<int>(&a,1);
      L2.setElemento<int>(&a,1);  
}

No compila nada de lo que he probado, he mirado por internet y a todo el mundo que esto le daba problemas se le solucionaba al hacerlo como yo arriba, y no encuentro mas ejemplos o formas de hacerlo. Leí en un foro en inglés que el problema podría ser que tengo que declarar, en setElemento, el puntero a T como const, lo he probado y tampoco funciona. ¿Que puedo hacer?

EDITO: los errores que da son:
si no pongo el template: expected primary expression before int.
                                  expected ';' before int.
y si pongo template:
lo mismo y ademá:  `template' (as a disambiguator) is only allowed within templates

Muchas gracias de antemano.
#85
Hola a todos, tengo un problema con la función realloc.

El problema es que al redimensionar un vector de tamaño 3 o más con esta función, los datos que tenía en las componentes 0 y 1 pierden su valor y se convierten en numeros aleatorios raros.

(no estoy seguro de si el problema está en hacer el vector de tamaño>2, o el problema es usar repetidas veces esta función, porque la tengo dentro de un "while")

He probado escribiendolo así:(siendo c el puntero a vector y n un número entero cualquiera).

realloc(c,n*sizeof(int));
(int *) realloc(c,n*sizeof(int));
realloc((int *)  c,n*sizeof(int));

Ninguna de estas formas funciona.
¿Me ayuda alguien por favor?Muchas Gracias.