|
271
|
Foros Generales / Noticias / Re: "Vulnerabilidad" en Google
|
en: 29 Marzo 2011, 14:31 pm
|
No veo como sacar un XSS de ahí. Está filtrado, simplemente pones tu foto en tu google personalizado...
Seguramente esté equivocado pero no veo la gravedad
No, no estás equivocado, y no tiene apenas gravedad. Pero un fallo de ese estilo en otros parámetros si provoca esos XSS
|
|
|
272
|
Programación / Programación C/C++ / Re: Referencia de un char [] en una función.[Akai pasate por favor que modificado]xD
|
en: 29 Marzo 2011, 13:55 pm
|
Si quieres pasar por referencia en C++, es tan simple como: void sprite::acarga_imagen(char* name,int & n){
De esta forma, pasas n por referencia. Fin del problema Por otro lado, lo de sprintf, si, me refería a eso, PERO falla una cosa, sprintf si el número es menor que 10, no te va a imprimir 09 o 08, por tanto, no tienes dos carácteres en la cadena (entendiendo estos dos carácteres como representables (numeros, letras), y posiblemente tengas el final de cadena). Entonces, eso deberás gestionarlo tu (si num <10 haces de una forma, sino, de otra)
|
|
|
275
|
Programación / Programación C/C++ / Re: Comunicacion entre procesos hijo en C
|
en: 29 Marzo 2011, 00:16 am
|
Si, esto sería un pequeño shell de una práctica de la facultad donde se utiliza esto: Esto crea tantos hijos como ordenes hay, y luego cada hijo hace hace un exec para cambiarse por el programa que realmente nos interesa poner en su lugar. Esto se plantea como que el shell crea 2 hijos cuando tu le pides ejecutar "ls -la | grep root" el primer hijo se hace un exec a "ls -la" y el segundo a "grep root" for(i=0;i<nordenes;i++){ forkpid=fork(); if(forkpid==0){ redirigir_entrada(i); redirigir_salida(i); cerrar_fd(); if(-1==execvp(ordenes[i],args[i])) } else if(forkpid==-1){ return ERROR; } else{ } } cerrar_fd();
Pero antes de ese código se preparan los canales de esta forma: cmdfd es una estructura que contiene dos enteros, infd y outfd. for(i=0;i<ncmd-1;i++){ pipe(fds); cmdfd[i].outfd=fds[1]; cmdfd[i+1].infd=fds[0]; }
Para las órdenes que haya, se crean n-1 tuberias. (revisa la referencia de pipe y dup2) y redirigir la entrada o salida sería esto: int redirigir_entrada(int i){ if(cmdfd[i].infd!=0){ //evitar redirigir la entrada estándar sobre si misma, perdida de tiempo. if(-1!=dup2(cmdfd[i].infd,0)) return OK; return ERROR; } return OK; } int redirigir_salida(int i){ if(cmdfd[i].outfd!=1){ //evitar redirigir la salida estándar sobre si misma, perdida de tiempo if(-1!=dup2(cmdfd[i].outfd,1)) return OK; return ERROR; } return OK; } int cerrar_fd(){ int i; for(i=3;i<=nds+2;i++){ //nds +2 es el numero del último descriptor de fichero activo. close(i); } return OK; }
Posiblemente encuentres por ahí un código más claro, pero lo básico es: Preparar canales Crear hijos Cerrar canales del padre si no se tiene que comunicar con los hijos Que los hijos se redirijan las entradas / salidas y cerrar los descriptores sobrantes A correr. EDIT: editados los comentarios del código.
|
|
|
276
|
Programación / Programación C/C++ / Re: Comunicacion entre procesos hijo en C
|
en: 28 Marzo 2011, 23:23 pm
|
Si estás en un sistema tipo Unix, utilizar tuberías puede ser una opción.
El procedimiento sería crear las tuberías desde el padre, crear los hijos, cerrar las tuberías en el padre y como los hijos heredan los descriptores de ficheros del padre, que estos utilicen como entrada y/o salida las tuberías. que el padre tenía abiertas en el momento de crear los hijos.
dup2 y pipe son las funciones usadas para ello.
En un sistema Windows no sabría decirte.
|
|
|
277
|
Programación / Programación C/C++ / Re: ficheros en listas enlazadas
|
en: 28 Marzo 2011, 08:08 am
|
En una lista enlazada no puedes hacer eso, bueno, si lo puedes hacer, pero no en los términos de obtener el resultado esperado.
Si lo haces sobre un array, te dará el tamaño de dicho array porque está situado en zonas de memoria contiguas.
PERO con listas enlazadas, esto no se cumple, ya que la inserción de cada nodo pudo haber sido contigua o no pero no cuentan como la misma estructura (array), y por tanto, no están en zonas contiguas de memoria.
Necesitas de alguna forma guardar el tamaño de tu lista. Alguna variable que incrementa cada vez que añades un nodo.
PD: array = tipo[]
|
|
|
278
|
Programación / Programación C/C++ / Re: |Lo que no hay que hacer en C/C++. Nivel basico|
|
en: 27 Marzo 2011, 10:51 am
|
[Zero] Si sabes que tu lectura va a ser siempre un entero y un salto de linea, creo que esto debería dar la talla.
En principio debería funcionar, si no me equivoco en algo. Para lectura de dos enteros, (entero espacio entero salto de linea)
Esto es debido a que scanf se utiliza para "scan with format". Como comentario curioso, en una práctica teníamos que leer algo de este estilo de un fichero: r tabulador X tabulador (45,64) espacio (78,95) salto de linea infernal, no? \t es el tabulador fscanf(fichero , "%c\t%c\t(%d,%d) (%d,%d)\n",&char1 ,&char2 ,&int1 ,&int2 ,&int3 ,&int4 )
y problema solucionado xD
|
|
|
279
|
Foros Generales / Noticias / Re: Mozilla lanzará Firefox 4, Firefox 5, Firefox 6 y Firefox 7 en este mismo año
|
en: 27 Marzo 2011, 10:48 am
|
Chillinfart, me da que no has entendido el cambio en el ciclo de desarrollo. Los cambios de versión "menores" que incluían parches, y algunas novedades ahora son similares a los 3.x de firefox 3. Salvo que al estilo chrome, le van a cambiar el número a la versión, no a la subversión.
En principio, el último "gran release" de firefox era el salto de 3 a 4, es decir, la última vez que en principio va a haber semejante cambio. Probablemente un cambio similar sólo se notará si miras, pongamos firefox 4 con firefox 7 a finales de año o firefox 8 del año que viene o asi.
|
|
|
280
|
Foros Generales / Foro Libre / Re: Ayudenme a elegir un lenguaje de programación!!!
|
en: 27 Marzo 2011, 10:36 am
|
Bien, no he querido comentar hasta ver que ya habian suficientes respuestas, gracias a todos, creo que estoy casi decidido, y necesito la respuesta de Akai (o de alguien que sepa C) que se que eres un entendido en la materia, tengo unas preguntas...
C C++ c#
Mi opinión? Aprendes C a secas. De esa forma NO te dsitraes con la programación orientada a objetos. Una vez tienes un cierto dominio de C, subes a C++, es C ampliado, y aprendes programación orientada a objetos. No recomiendo empezar directamente con un lenguaje de programación orientada a objetos, porque si estás aprendiendo de primeras a programar, complica las cosas. Por tanto, después de C++, ya verás que es lo que más te trae, y el resto de lenguajes en principio simplemente serán cosa de mirar la sintaxis para ver como se hace esto o aquello, pero no aprender a programar, sino aprender a escribir para ese lenguaje. ¿Por qué lo veo así? Antes de entrar a la facultad vi por mi cuenta C, en el instituto. Una de las asignaturas de 1o de la carrera era también programación en C, y en 2o se pasa a C++ y se introduce la POO. C puede costar al principio, pero cual es el resultado de seguir ese camino? Para mi, prácticamente java y python es cuestión de mirarme la sintaxis para cuando quiera mirármelos más a fondo de lo breve que los conozco. Lo mismo para cualquier otro lenguaje. C me ha creado una forma de expresar mis ideas en código, C++ me dio otro método para lo mismo pero orientado a objetos, y como ya dije, ahora simplemente es para el lenguaje X revisar la sintaxis para ver como se trasladan lo mismo. Pero no necesito aprender a programar cada vez. De la misma forma que tu no necesitas volver a aprender a hablar como cuando lo hiciste de niño, ya tienes una concepción del mundo y cuando aprendes un idioma lo único que haces es aprender a expresar dicha visión a través de las palabras del otro idioma.
|
|
|
|
|
|
|