[Previo por Fecha] [Siguiente por Fecha] [Previo por Hilo] [Siguiente por Hilo]
[Hilos de Discusión] [Fecha] [Tema] [Autor]¡Hola! Escribo el mini programa y comento un poco (el original está al final, con el mail de Eloy). Pongo mis comentarios tras asteriscos. #include <stdio.h> * No tenías estos includes en el programa (el último es necesario para el * fork, quizá simplemente para pillar el valor de salida de la función, * pero siempre conviene ponerlo). Los dos primeros son para el waitpid(); #include <sys/types.h> /* para el wait */ #include <sys/wait.h> /* para el wait */ #include <unistd.h> /* para el fork */ void algo() { * Siempre que se va a escribir en una zona de memoria conviene tener el * espacio reservado, bien con malloc(), bien con un array. En el programa * inicial simplemente era un puntero que apuntaba al espacio en el que * se escribía char cadena[80]; /* reservamos un espacio */ * Esta es una forma simple de vaciar una cadena. Ahora no es necesario, * pero... cadena[0]='\0'; /* la cadena esta vacia */ scanf("%s",cadena); printf("Se leyo: %s\n",cadena); } main() { * Esto es para pillar la salida del fork pid_t p_hijo; algo(); * Así la pillamos if((p_hijo=fork())==0) { algo(); exit(1); } printf("Listo\n"); * Y no podemos ser tan malos padres que mandemos al hijo a por el * periódico y no lo esperemos, ¿verdad?. * La función waitpid nos permite especificar por qué hijo se quiere * esperar (en este, caso, solamente hay uno). Los otros parámetros * son para enterarnos del estado del hijo y cosas así. waitpid(p_hijo,NULL,0); exit(0); } On Tue, 11 May 1999, Eloy Espozo Espinoza wrote: > holax de nuevo > > tons me explico mejor: estoy tratando de hacer un programa que lea > un mensaje de distintos procesos, el codigo es como el que sigue: > > > > #include <stdio.h> > > void algo() > { > char *cadena; > scanf("%s",&cadena); > printf("Se leyo: %s",cadena); > } > > main() > { > algo(); > if(fork()==0) > { > algo(); > exit(1); > } > printf("Listo"); > exit(0); > } > > > > Al correrlo, la primera llamada a al funcion algo corre ok pero la segunda > llamada a la funcion algo, parece que no se > ejecutara, termina el programa y sale > Ahora hago lo mismo sin tuilizar fork y corre perfectamente. > (bueno, tiene los problemas de memoria propios y demas) > > Cual seria el cogdigo correcto? como deberia estructurar mi programa? > ayuidenme profavor !! > > > Que puede ser me tiene muy intrigado, que puedo leer para saber esto o que > estoy haciendo mal talvez omiti algo, en fin > > > de nuevo gracias > > > Eloy Una nota final (para quien no lo sepa, por supuesto). Cuando se realizan modificaciones en un programa y se quieren mostrar las mismas, la mejor forma es guardar una copia del original y utilizar el comando diff para ambos ficheros (original y modificado). En este caso casi no compensa, porque son ficheros muy pequeños, pero ahí va: aragorn[~/programas/prueba]% diff -u fork.c fork-inicial.c --- fork.c Wed May 12 12:28:25 1999 +++ fork-inicial.c Wed May 12 12:15:50 1999 @@ -1,27 +1,20 @@ #include <stdio.h> -#include <sys/types.h> /* para el wait */ -#include <sys/wait.h> /* para el wait */ -#include <unistd.h> /* para el fork */ - void algo() { - char cadena[80]; /* reservamos un espacio */ - cadena[0]='\0'; /* la cadena esta vacia */ - scanf("%s",cadena); + char *cadena; + scanf("%s",&cadena); printf("Se leyo: %s\n",cadena); } main() { - pid_t p_hijo; algo(); - if((p_hijo=fork())==0) + if(fork()==0) { algo(); exit(1); } printf("Listo\n"); - waitpid(p_hijo,NULL,0); exit(0); } Como veis, tiene un - delante de cada línea que yo he escrito, y un + delante de las viejas que han cambiado. Que os sirva, Carlos. _______Carlos Costa Portela_______________Password Technologies______ | e-mail: ccosta en servidores net | http://www.registros.net | | www: http://ccp.servidores.net | http://www.avisaboe.com | |http://compuconsejos.servidores.net| http://moana.servidores.net | |__Tódalas persoas maiores foron nenos antes, pero poucas se lembran__|