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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


  Mostrar Mensajes
Páginas: 1 2 3 [4] 5 6 7 8 9
31  Programación / Programación C/C++ / Problemas con los FIFOs en: 5 Noviembre 2016, 21:25 pm
En un archivo tengo el siguiente codigo fuente:
Código
  1. #include <stdio.h>
  2. #include <fcntl.h>
  3.  
  4. int main(void){
  5.    mkfifo("FIFO",0777);
  6.    int fd = open("FIFO",O_WRONLY);
  7.    int n = 1234;
  8.    puts("ESCRIBIENDO DATO\n");
  9.    write(fd,&n,sizeof(int));
  10.    puts("DATO ESCRITO\n");
  11.    close(fd);
  12.    return 0;
  13. }

Y en otro, este:
Código
  1. #include <stdio.h>
  2. #include <fcntl.h>
  3.  
  4. int main(vodi){
  5.    int fd = open("FIFO",O_RDONLY);
  6.    int n;
  7.    puts("LEYENDO DATO\n");
  8.    read(fd,&n,sizeof(int));
  9.    printf("DATO LEIDO: %d\n",n);
  10.    read(fd,&n,sizeof(int));
  11.    printf("DATO LEIDO OTRA VEZ: %d\n",n);
  12.    close(fd);
  13.    return 0;
  14. }

Ejecuto el primer programa en segundo plano, y despues el segundo programa, y la salida que generan es la siguiente:
Código:
ESCRIBIENDO DATO

DATO ESCRITO
LEYENDO DATO

DATO LEIDO: 1234
DATO LEIDO OTRA VEZ: 1234
Según tengo entendido, cuando un programa lee de un fifo y en este no quedan datos que leer, espera a que otro programa escriba algo en el para leer.
¿Por qué lee 2 veces el mismo dato en vez de quedarse bloqueado hasta que algún otro programa vuelva a escribir en el fifo?
Es mas, ¿Por qué entre "ESCRIBIENDO DATO" y "DATO ESCRITO" hay dos lineas cuando solo imprimo una al final de cada mensaje?
¿Se os ocurre alguna forma de hacer que el programa se detenga hasta que no se escriban nuevos datos en el fifo en vez de leer 2 veces el mismo dato?
32  Programación / Programación C/C++ / Re: Leer y enviar emails desde C en: 25 Octubre 2016, 00:42 am
En internet solo veo SMTP, no STMP. ¿Lo has escrito bien?
33  Programación / Programación C/C++ / Leer y enviar emails desde C en: 24 Octubre 2016, 13:38 pm
¿Como puedo hacerlo? ¿Hay algun tutorial en internet sobre esto? No solo gmail, sino de cualquier tipo en general como hotmail yahoo etc.
34  Programación / Programación C/C++ / "foo(bar = baz)" vs "bar = baz; foo(bar)" en: 19 Octubre 2016, 12:36 pm
Cuando yo veo algo como
Código
  1. foo(bar = baz)
lo que me imagino que ocurre es que se lee el contenido del registro de baz y se guarda en la pila para luego acceder al registro de la variable bar y pasarle el valor que se guardó en la pila, y despues sin eliminar el valor de la pila se le pasa tambien al parametro de la funcion foo, por lo que es mas eficiente (aunque muy poco, pero mas eficiente) que si hago algo como esto:
Código
  1. bar = baz;
  2. foo(bar);
Ya que, en este caso, copio y pego el valor del registro en la pila 2 veces.

Asi es como me lo imagino, pero en realidad no tengo ni idea de como funciona. ¿Me equivoco?

¿Y si hiciera esto?
Código
  1. a = b = c;
¿Pasaria algo parecido?
35  Programación / Programación C/C++ / Cambiar el nombre del getter y setter de @property en Objective-C en: 17 Octubre 2016, 12:53 pm
Si le quiero cambiar el nombre del getter hago algo asi:
Código
  1. @property(getter=loquesea) NSString* propiedad
Si le quiero cambiar el setter:
Código
  1. @property(setter=loquesea) NSString* propiedad
Pero si le quiero cambiar las dos cosas:
Código
  1. @property(getter=loquesea,setter=loquesea2) NSString* nombre
Me da error.¿Estoy haciendo algo mal?
36  Programación / Programación C/C++ / Re: ¿Que diferencias hay entre allegro y opengl? en: 10 Octubre 2016, 22:36 pm
En cualquier caso ¿Que diferencia hay entre ellos? :huh:
37  Programación / Programación C/C++ / ¿Que diferencias hay entre allegro y opengl? en: 10 Octubre 2016, 21:40 pm
Y ¿Cual de los 2 creen que es mejor?
Me gustaria hacer un programa parecido a los que se usan para dibujo tecnico, de esos que sirven para hacer rectas y circunferencias para hacer planos y diseños. De todos modos, es probable que mas tarde no me limite solo a ese programa y me dedique a hacer algunos jueguecillos.
38  Programación / Programación C/C++ / Re: Programar graficos en c++ en: 10 Octubre 2016, 11:07 am
Un programa que me permita, por ejemplo, mostrar un determinado prisma girando o un grafico de matematicas cuando le metes una funcion o un avion volando, algo asi por el estilo.
39  Programación / Programación C/C++ / Programar graficos en c++ en: 9 Octubre 2016, 22:18 pm
La mejor libreria que he encontrado hasta el momento (segun las opiniones que veo en internet) es la de openGL ¿Que opinan ustedes?.
De todos modos, he intentado instalar opengl para dev c++ tropecientas veces y me sigue dando fallos de todo tipo. ¿Alguien podria hacerme el favor de decirme como instalarlo? Alguien que lo haya conseguido, por supuesto.
La mayoria de los tutoriales te dicen que te descarges una carpeta y de ahi copies y peges los archivos que contienen en las ubicaciones que te van diciendo (una de ellas, C:\windows\system). ¿Hay alguna mejor manera de hacerlo?
40  Programación / Programación C/C++ / Re: Problema con el metodo BubbleSort en: 4 Octubre 2016, 20:47 pm
En un principio, segun el estandar de C++ no se le puede cambiar el tamaño de un array (en un principio, ojo), ya que cuando tu declaras un array, el compilador necesita saber cuanto espacio tiene que reservar en la memoria para ese array. Por ejemplo, si te creas una variable de tipo char, un array de 3 elementos de tipo int y despues una variable de tipo float, el compilador dejara un byte de espacio para el tipo char, 12 para el array de int (3 elementos * 4 bytes que ocupa cada uno) y despues 4 bytes para el tipo float. Quedaria tal que asi:
Código:
bytes:      [1          ][2          ][3          ][4          ][5          ][6          ]
variables:  [char       ][array de int                         ][float      ]
Ahora tu imaginate que le dices al array que en vez de tener 3 elementos va a tener 4. El espacio que viene despues del array ya esta ocupado por un float. Si el array se volviera un elemento mas grande entraria en conflicto con la variable de tipo float. Por lo tanto, en un principio va a ser que no es posible cambiar el tamaño de un array. Sin embargo, si el espacio se lo asignas de forma dinamica (es decir, mientras se ejecuta el programa, no antes de que se ejecute) tendrias que usar punteros. Te voy a explicar lo que es un puntero y la relaccion que existe entre estos y los arrays porque me veo en la obligacion de hacerlo si quiero que entiendas porque lo que estas pidiendo sin usar los punteros es imposible (Te lo explico mas adelante).
Ahora que te he explicado todo esto deberias entender que el tamaño del array debe ser un dato que se pueda conocer antes de ejecutar el programa para que éste pueda ser creado. A esto es a donde queria llegar. El caso es que en un principio no se puede, ya que no forma parte del estándar, pero la mayoria de los compiladores permiten declarar arrays con un tamaño indicado por una variable. Esto es asi porque en realidad los compiladores crean, en lugar de un array, un vector, que funciona muy parecido a un array en muchos aspectos.No me preguntes mucho acerca de los vectores porque en realidad yo tampoco los conozco demasiado bien :P
Ahora vamos con los punteros. Hay variables que almacenan un int, un float, un char, un array de algun dato determinado, etc. Bueno, pues entre ellos hay otro tipo de dato que son los punteros. Son bastante dificiles de entender. El caso es que un puntero es una variable que almacena la ubicacion en la memoria en la que esta otra variable. Del mismo modo que para tu decirle a alguien donde vives le dices el nombre de tu calle y tu barrio, e incluso el nombre de tu provincia y pais si fuera necesario, para saber en que parte de la memoria "viven" las variables (O mejor dicho, donde les ha dicho el compilador que deben de estar) utilizan un numero que cuando lo imprimes se presenta en forma hexadecimal. El hecho de que sea hexadecimal es lo de menos, el caso es que es un numero donde te dice a que parte de la memoria ir cuando haya que averiguar que contiene tal variable. Bueno pues un puntero contiene ese dato, ese numero, y con ellos puedes averiguar que hay en esa ubicacion directamente. OJO A LO QUE HE DICHO: un puntero contiene el numero (este numero se trabaja de una forma especial, asi que no puedes hacer cosas como multiplicarlo con otro numero como lo haces con los int) que te dice donde esta el dato de una variable, pero la variable de tipo puntero que contiene tal numero "vive" en otra parte completamente diferente de la memoria y el numero que dice donde esta ubicado la variable de tipo puntero sera diferente que el que contiene el puntero (el cual es el lugar donde esta ubicada otra variable). El caso es que con un puntero, ademas de almacenar este valor, puedes averigüar el contenido de la variable que esta en ese sitio. Los arrays son punteros que almacenan siempre el mismo valor y que no se le puede cambiar(concretamente, guardan la ubicacion del primer elemento del array). Cuando pones entre corchetes el numero 0, obtienes lo que esta contenido en la ubicacion que contiene el array. Pero si pones entre corchetes el 1, entonces obtienes lo que esta contenido en la siguiente ubicacion del array. En el ejemplo que te expuse antes de la variable char, array de int y variable float, podria decirse que la ubicacion del primer elemento del array es el numero 2 (y por tanto tambien del array mismo), y si haces array[3] accedes al tercer elemento mas alla del primero, es decir, lo que sea que contenga la variable float. Por eso debe reservarse el espacio de un array en tiempo de compilacion antes de crearse el programa, porque los elementos de un array deben estar uno a continuacion de otro para acceder a ellos correctamente.
Ahora tu imaginate que reservamos esos espacios en memoria, y al array, que es un puntero al primer elemento del mismo, le decimos que en vez de guardar la ubicacion del primer elemento del array va a guardar la ubicacion de la variable de tipo char. Entonces corremos el riesgo de que no haya ninguna variable que guarde la ubicacion del primer elemento del array, y por tanto no podamos saber donde empezaba el mismo. Esto es un problema porque despues no habra manera de acceder a el (podriamos acceder al elemento que le sigue al de tipo char, pero en un principio no sabemos si realmente es justo ahi donde esta el primer elemento del array, ya que el compilador puede organizar como se almacenan los datos en la memoria a su manera). Entonces, para evitar ese problema, a los punteros que realmente son los arrays no se les puede cambiar el valor. Asi siempre sabremos donde empieza el array.

Podemos crear arrays cuyo tamaño sea determinado cuando se ejecuta el programa, pero no cambiarlo ni hacer que el array almacene otra ubicacion para no perder de vista donde estaba. Por tanto, no se puede crear un array que cambie de tamaño a medida que vaya necesitando mas(En realidad si, creando los arrays de forma dinamica pero uff, que cansado estoy de escribir. Ya cuando seas mayor veras como se hace eso xDD).

Ahora es cuando tu vienes y me dices: "Pero bueno, ¿Por que no has empezado diciendome directamente que no se puede y asi no me tengo que matar leyendo todo ese tocho de texto?"  :xD



Pero mira, una cosa que si puedes hacer es, en el metodo llenar cuando te dice "INDIQUE EL NUMERO DE ESTUDIANTES A UTILIZAR EN EL PROGRAMA: " Puedes con una variable crear el array con el tamaño justito y despues mientras que vas introduciendo nombres decir algo como "Dame el primer nombre del estudiante o escribe \"salir\" para dejar de seguir introduciendo datos". El numero que le indicas cuando pide numero seria el total del alumnos que van a estar. Algo es algo.Solo es una sugerencia.



Cita de: dato000 en Ayer a las 18:39
no se porque pero el programa no quiere ejecutar correctamente el guardado de la variable string y luego imprimirla como parte de una función por valor, rarisimo eso no lo habia visto o.O.

Ni siquiera funciona para un solo estudiante, sera por el compilador?? ya probe varias combinaciones
No se si me explique bien antes. En el codigo que presentas en tu comentario en el que usas una variable de string en vez de un array, prueba una cosa: No le pases el nombre por parametro. Crea una variable global de tipo string con el mismo nombre y borra el parametro y lo demas dejalo tal cual. De esta forma la funcion accedera directamente a esa variable y no a la copia que crea al pasarselo por valor por el parametro. Si en vez de pasarle un string por parametro le pasas un array de string dejando el codigo tal cual lo presento jesusinfo, cuando introduzcas un solo elemento al array no deberia darte problemas. Si lo sigue haciendo me rindo.

[MOD] NO se debe hacer triple post.
Páginas: 1 2 3 [4] 5 6 7 8 9
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines