|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - zany_666
1
« en: Viernes 14 de Mayo de 2010, 21:22 »
Hola, he creado este post porque me han surgido más dudas a partir de otro en el que hablan sobre como montar una red wifi. En esencia ponía esto: Inicio>panel de control>conexion de red. En propiedades de la conexion WIFI>selecciona protocolo tcp/ip>pulsa propiedades. Teclea este protocolo: En IP 192.168.1.33 para el segundo pc 192.168.1.34 La mascara de sub red se te pone sola Puerta de enlace esta para los dos pc´s 192.168.1.1 ponles esta son de telefonica. 80.58.0.33 80.58.32.97 Aplicas aceptas. Mi duda es a la hora de poner las IP y puertas de enlace. Las descritas en ese post, valdrían para cualquier tipo de equipo? Os describo como son los equipos que quiero que estén en la red: - Portátil con W7 - Sobremesa con W XP - Ambos se conectan a un router wifi, independientemente el uno del otro, para acceder a internet. - Los dos también se conectan con IP obtenida automáticamente y están en el mismo grupo de trabajo. Haber si me podeis echar un cable, es que no comprendo muy bien como montar dicha red. Había pensado en usar las del post, pero no sé si son válidas. Puedo cambiar las locales y ponerles las que yo quiera dentro del rango, por ejemplo 192.168.110.xxx, pero y la puerta de enlace, DNS, y la IP on la que el router se conecta a internet (la que ahora se obtiene automaticamente)?? Gracias!
2
« en: Sábado 8 de Mayo de 2010, 15:52 »
Inserta un objeto de tipo "Microsoft Editor de Ecuaciones 3.0" (el nombre es así o parecido) Te saldrá un pequeño menú donde prodrás ir insertando símbolos matemáticos, operadores, números elevados, matrices, integrales de todo tipo, ... El menu es como el de la imágen de este post: http://www.foros.solocodigo.com/viewtopic.php?f=4&t=42218#p152710
3
« en: Miércoles 5 de Mayo de 2010, 23:24 »
No comprendo, como es que a un entero le metes caracteres?
4
« en: Lunes 3 de Mayo de 2010, 22:06 »
También puedes probar con Eclipse, es un entorno multiplatarforma gratuito que te permite usar Pascal. Yo lo uso en W7 y me va muy bien. Puedes echar un vistazo aquí http://www.eclipse.org/ y rebuscar por san Google.
5
« en: Lunes 3 de Mayo de 2010, 12:52 »
Jeje, a mi en mi último programa, he tenido un montón de errores de este tipo, que le das un montón de vueltas y no sabes porqué es XD. Me alegro de que lo hayas solucionado.
6
« en: Sábado 1 de Mayo de 2010, 22:08 »
Hola, es C o C++? En C yo haría matriz[j].nombre="pancho"; No comprendo por haces el new.
7
« en: Sábado 1 de Mayo de 2010, 20:47 »
Hola, quería pediros ayuda para un programa que me he hecho en C. Lo que quiero hacer en mi programa es un pipeline (había puesto algún post con dudillas al respecto que ya fueron resueltas) La ejecución de mi programa, por ejemplo, ./pipeline ls wc tiene que ser igual a la ejecución en la shell de $ ls | wc. De momento he probado con solo dos instrucciones, aunque posteriormente lo haré con más de 2. Creo un hijo para la ejecución de cada instrucción y los comunico mediante pipes, mi problema es que el primer hijo no ejecuta correctamente con execlp, y no comprendo porqué, como consecuencia el segundo hijo no ejecuta nada (no recibe nada por el pipe) y el padre se queda esperando a que termine éste. Os pongo lo que me muestra la shell y el código haber si me podeis echar una mano y veis algún fallo. SHELL:SOY EL PRIMER HIJO Voy a ejecutar: ls SOY EL PADRE : Ejecución incorrecta 1 SOY EL ULTIMO HIJO Voy a ejecutar: wc SOY EL PADRE Aquí se queda esperando el padre #define READ 0 #define WRITE 1 int main(int argc, char *args[]) { int i,j,k; int pid; int valor; int child_pid; int status; int **arrayPipe; if (argc == 2) { execlp(args[1],args[1],NULL); } else { //Crear pipes arrayPipe = (int **) malloc((argc -2) * sizeof(int *)); for(i=0;i<argc-2;i++){ arrayPipe [i ] = (int *) malloc(2 * sizeof(int)); valor=pipe(arrayPipe[i]); if (valor==-1){ perror("Error al crear el pipen"); return -1; } } //Crear procesos for (i=0;i<argc-1;i++){ pid = fork(); if (pid == -1){ perror("Error al crear el hijon"); return -1; } else if (pid == 0){ /* Child */ if(i==0){ //Si es el primer hijo printf("SOY EL PRIMER HIJOn"); //Cierro todos los descriptes excepto los suyos for (k=0;k<argc-2;k++){ if (k!=i){ close(arrayPipe[k][READ]); close(arrayPipe[k][WRITE]); } } printf("Voy a ejecutar: %sn",args [i +1]); close(arrayPipe[k][READ]); //ESTA Y LAS DOS SIGUIENTES ESTÁN MAL, EL INDICE ES i Y NO k dup2(arrayPipe[k][WRITE],1); close(arrayPipe[k][WRITE]); execlp(args[i+1],args[i+1],NULL); //Esta es la instrucción que me falla } else if (i==argc-2){ //Si es el último printf("SOY EL ULTIMO HIJOn"); //Cierro todos los descriptes excepto los suyos for (k=0;k<argc-2;k++){ if (k!=i-1){ close(arrayPipe[k][READ]); close(arrayPipe[k][WRITE]); } } //printf("Voy a ejecutar: %sn",args[i+1]); close(arrayPipe[i-1][WRITE]); dup2(arrayPipe[i-1][READ],0); close(arrayPipe[i-1][READ]); printf("Voy a ejecutar: %sn",args [i +1]); execlp(args[i+1],args[i+1],NULL); } else { //Si es intermedio //Aquí iria el código en el caso de ser más de dos hijos } } else {/* Parent */ //Cierro descriptores en el padre if (i==0){ for (j=0;j<argc-2;j++){ close(arrayPipe[j][READ]); close(arrayPipe[j][WRITE]); } } child_pid = wait(&status); if (WIFEXITED(status) == 0){ printf(": Ejecución incorrecta 1n"); } else { if (WEXITSTATUS(status)){ printf(": Ejecución incorrecta 2n"); } else { printf(": Ejecución correctan"); } } } } //Liberar memoria for(i=0;i<argc-2;i++){ } } return 0; }
EDIT:Un error tonto, lo he puesto en el código.
8
« en: Viernes 30 de Abril de 2010, 12:51 »
He encontrado una solución, crear un array dinámico de pipe, pero me da algún fallito, y lo he probado de estas dos formas: arrayPipe = malloc(sizeof(int *) * N );for(i=0;i<N;i++){ arrayPipe [i ] = malloc(sizeof(int) * 2); //Dos posiciones fijas}
Este me da un error al crear el pipe(): Error al crear el pipe : SuccessY acaba. arrayPipe = malloc(N * sizeof *arrayPipe );for(i=0;i<N;i++){ arrayPipe [i ] = malloc(2 * sizeof *arrayPipe [i ]); //Error aqui}
Este me da un error de fallo de segmentación desde el principio, sin llegar a ejecutar la instrucción de malloc. El pipe me lo creo así (dentro del bucle for) en ambos casos: valor=pipe(arrayPipe[i]);
Haber si me podéis ayudar, gracias!
9
« en: Lunes 26 de Abril de 2010, 00:43 »
Hola, quería preguntaros haber si me podeis dar una idea de como implementar un pipeline. He visto en este foro un tema parecido: viewtopic.php?f=18&t=41996&p=151702&hilit=pipe#p151702 que es más o menos lo que quiero hacer con mi programa. He usado fork() para crear un hijo y un pipe() para comunicarlo con el padre. De momento, he conseguido ejecutar dos instrucciones, por ejemplo, un y me ha funcionado bien. Ahora lo que quería hacer es implementarlo de tal forma que me admita más argumentos, conectado hijos mediante tuberías. Había pensado en hacer un for() para crear varios hijos y que el último en ejecutar un comando sea el padre. Voy por buen camino? Lo he intentado con un solo pipe(), debería crearme alguno más? Gracias!
10
« en: Sábado 24 de Abril de 2010, 13:25 »
Solucionado! Al final la solución estaba en lo más sencillo, mientras escribia en el fichero en el while, lo escrbía a la vez por pantalla. Una tontería de la que no me había dado cuenta XD. Hago otra pregunta: mi fichero, en el que escribo, tiene al final el fd=0, al ser un fichero, estaría bien hacer un close(0), no? Ya que no se trata de stdIn sino de ese fichero.
11
« en: Sábado 24 de Abril de 2010, 01:54 »
Hola, como podría mostrar un texto por pantalla y a la vez ese mismo texto se copie en un fichero? Estoy usando pipes(), pero el problema es que cuando me escribe la información por pantalla no lo hace en el fichero y viceversa. Gracias adelantadas!
12
« en: Viernes 23 de Abril de 2010, 14:26 »
Hola! me gustaría saber si en Windows XP existe algún tipo de registro que almacene carpetas (o ficheros) borrados. No para recuperarlos, sino para saber si han sido borrados y cuando se han borrado si es posible. Gracias adelantadas.
13
« en: Domingo 18 de Abril de 2010, 20:27 »
Me respondo, la solución está en: fdOut=open("escritura",O_WRONLY | O_TRUNC | O_CREAT,0700);
No da problemas
14
« en: Domingo 18 de Abril de 2010, 15:04 »
Lo he solucionado, el error me daba en el dup de alguna forma, pero lo he arreglado de esta manera: fdIn=open(argv.fIn,O_RDONLY); dup2(fdIn,0); close(fdIn); fdOut=open(argv.fOut,O_CREAT,0700); close(fdOut); fdOut=open(argv.fOut,O_RDWR); dup2(fdOut,1); close(fdOut);
Sigo sin comprender porque con el primer open() no funciona y tengo que cerrar el descriptor y hacer un segundo open(), hay alguna forma más "elegante" de hacerlo, sin tener que hacer 2 open()?
15
« en: Sábado 17 de Abril de 2010, 22:09 »
Hola, de nuevo os pregunto sobre C, estoy dándole muchas vueltas y no comprendo porque puede ser el error. Para mi programa estoy usando dup2() de esta forma, comprobando todos los errores que me puedan dar las llamadas al sistema: fdIn=open(lectura,O_RDONLY); //Abro el fichero de lectura valorIn=dup2(fdIn,0); //Cierra entrada estándar y duplica closeIn=close(fdIn); fdOut=open(escritura,O_CREAT,0700); //Abro el archivo de salida valorOut=dup2(fdOut,1); //Cierra salida estándar y duplica closeOut=close(fdOut); execvp(aux[0],aux); //esto ejecuta un comando sin argumentos, por ejemplo un wc o un head
Lo que quiero hacer es abrir el fichero "lectura", que es un fichero que contiene texto y abrir, o crear en caso de que no exista, el ficero "escritura", al ejecutar el exec() quiero que "lectura" sustituya a la entrada estandar, y la salida estandar sea sustituida por "escritura", es decir, no escribo nada por teclado ni aparece nada en pantalla, por ejemplo, si el comando a ejecutar es un wc, en mi fichero "escritura" debería aparecer un número (resultado de haber contado palabras de "lectura") Lo que me ocurre es que el segundo dup2 me da un error y no pasa de esa línea, ni siquiera devuelve un valor de error, lo que me aparece es esto al ejecutar: wc: error de escritura: Descriptor de archivo inválido
No veo el error con el descriptor de fichero, duplico y cierro la salida estándar, para que me escriba en "escritura" y no por pantalla, alguien me puede ayudar? Espero haberme explicado bien. Gracias adelantadas y por haberse leído este tochazo jeje.
16
« en: Sábado 17 de Abril de 2010, 20:25 »
Hacerlo en pseudocodigo no es muy complicado, solo tienes que ponerlo, digamos, en la forma que se habla normalmente, me explico con un ejemplo: if (entero==0){ entero=entero+1; } else { printf("entero vale %dn",entero ); }
en pseudocodigo seria algo como: si entero vale 0 entonces imprimir entero<-entero + 1 sino imprimir
espero que te sirva para hacer tu código
17
« en: Sábado 17 de Abril de 2010, 20:17 »
Hola, yo utilizo gcc y me va muy bien. Espero que te sirva
18
« en: Viernes 16 de Abril de 2010, 13:17 »
Hola, muchas gracias por las respuestas. He probado con: aux [0] = (char *)malloc(sizeof(char)*X );
Y ya no aparece fallo de segmentación Me ha resultado muy extraño, pues tenía otro programa parecido y no tenia que reservar memoria con malloc.
19
« en: Jueves 15 de Abril de 2010, 12:39 »
Hola, quería preguntaros si veis algún error en la siguiente instrucción: while (fscanf(punteroF ,"%s %s %s",aux [0],argv. fIn,argv. fOut) != EOF ){ //Trato de cada línea }
Lo que quiero hacer es leer hasta final de fichero línea a línea. Este fichero tiene en cada línea 3 palabras separadas por espacios. Leo la primea cadena y la guardo en la primera variable, leo la segunda, tras el espacio y la guardo en la segunda... y así con la tercera punteroF es de tipo FILE, y es el valor devuelto al hacer un fopen() (que hace correctamente) argv.fIn y argv.fOut son cadenas de caracteres (char cadena[100] aux[0] es la primera posición de una variable declarada como char *aux[2]; Mi problema es que al hacer está instrucción mi programa me da un fallo de segmentación, alguien podría ayudarme?Gracias por adelantado
20
« en: Viernes 9 de Abril de 2010, 10:46 »
Hola a tod@s! Me estoy haciendo un programilla en C en el que tengo varios procesos creados con fork() y cada uno de estos procesos ejecuta un programa con exec(). Al ejecutar mi programa, todos los que quiero ejecutar con exec () se lanzan a la vez. Por último, en el código de mi programa hago un wait() para esperar a que cada hijo (proceso) termine y muestro el estado con el que han salid. Hasta aquí todo me funciona bien, pero me gustaría que cuando uno de estos programas se cierre o muera se vuelva a lanzar, es decir, siempre van a estar ejecutandose. He utilizado Seleccionar todo if (WIFEXITED(status)){ execvp (...); }
Pero con esto solo me lanza el primer programa ejecutado con exec() sea cual sea el que cierre, y lo que quiero es que si tengo tres programas A, B, C, se ejecuten simultaneamente y si cierrro el A se vuelva a lanzar el A. No sé si me explicado bien... ¿Cómo puedo saber cuando un hijo termina (sea cual sea el estado en que termino) para volver a lanzar el proceso?Gracias adelantadas!
21
« en: Viernes 28 de Agosto de 2009, 10:25 »
Hola, alguien sabe como puedo recorrer con python un directorio y sus subdirectorios recursivamente? Hay que usar alguna función especial que me devuelva los directorios o algo asi? He estado echando un vistazo a el post "Eliminar archivos duplicados del sistema" del forero Edo que creo que tiene bastante que ver. Pero estoy empezando y no lo entiendo muy bien jeje. Saludos y gracias!
22
« en: Jueves 27 de Agosto de 2009, 22:37 »
tengo un TEdit al que he llamado edit1 (que poco original XD). En el solo escribo un numero que quiero que lea. Lo he hecho de esta forma: numero:=edit1.Text; {Para que me guarde en la variable numero lo que he puesto en edit1} es correcto?¿?Y una cosa mas, hay algun equivalente en delphi (o algo parecido) al writeln de Pascal?¿? Saludetes!
23
« en: Jueves 27 de Agosto de 2009, 22:35 »
Gracias! Deberías haber creado un tema nuevo en el foro porque esta pregunta no tiene nada que ver con la original. Mis disculpas. Pense que al ser de Delphi.. en fin pensé que más post serian molestos me van surgiendo dudas de diferentes tipos... Haré los post según el tema jejeje
24
« en: Miércoles 26 de Agosto de 2009, 22:07 »
Bueno, tengo alguna dudilla mas con delphi, est vez de como leer un archivo binario. No se muy bien como leer un campo de un registro, me explico: - Tengo un tipo TRegistro con diferentes campos: TRegistro=RECORD campo1:string[1]; campo2:integer; end;
- Y un fichero binario que contiene los registros: miFichero: FILE OF TRegistro; Como puedo leer cada campo de cada registro y avanzar por el fichero (posicionanndome de registro en registro y de cada registro leer todos sus campos????He probado esto (suponiendo que las variables auxiliares tienen el mismo tipo que el campo del TRegistro): var registro:TRegistro; f:file of TRegistro; begin AssignFile (f,'fichero.fic'); Reset (f); while not EOF(f) do begin Read (f,registro.campo1); campoAuxiliar:=registro.campo1; {Aqui, seria correcto: campoAuxiliar:=campo1; ???} Read (f,registro.campo2); campoAuxiliar2:=registro.campo2; end;
Esta correcto?¿? Es que las instrucciones read creo que no están bien. He googleado pero no he visto ejemplos con registros de forma clara. Gracias de antemano!
25
« en: Lunes 24 de Agosto de 2009, 22:07 »
Hola, me ha surgido un problemilla al intentar dibujar trazos con el ratón sobre un TImage. estuve buscando por internet y encontre un tuto bastante sencillo de como dibujar (de momento solo con una llinea en negro para empezar con algo fácil) pero no me funciona como debe y no se porque es. Mi diseño es simple: mi TForm con un Timage dentro que cubre todo (align=alClient) Mi codigo con ayuda del tuto: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) Image1: TImage; private { Private declarations } Pintando : Boolean; procedure FormCreate(Sender: TObject); procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer); procedure Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Pintando := False; Image1.Canvas.Refresh; end; procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin If Button = mbLeft Then Begin Pintando := True; Image1.Canvas.MoveTo (X,Y); end; end; procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin If Pintando Then Image1.Canvas.LineTo (X,Y); end; procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin If Button = mbLeft Then pintando := False; end; end.
Al ejecutar el programa me deberia salir la ventana como un lienzo en blanco (tal como el ejemplo del tutorial) y poder hacer trazos pulsando el boton izq del raton pero no aparaece lienzo en blanco, solo mi Tform como sino hubiese puesto Timage. Sabeis porque podria ser? Puede ser por la version de Delphi? La mia es Turbo Delphi 2006. Un saludo y gracias adelantadas!!! EDIT: Ya está!!!! Mi error ha sido que tengo que escoger los procedimientos en Events del Objet Inspector
|
|
|