[Previo por Fecha] [Siguiente por Fecha] [Previo por Hilo] [Siguiente por Hilo]

[Hilos de Discusión] [Fecha] [Tema] [Autor]

Re: Unidentified subject!



¡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__|



[Hilos de Discusión] [Fecha] [Tema] [Autor]