Está en la página 1de 6

/* Programa 1 Programa que hace uso de las llamadas al sistema fork(), getpid() y getppid().

Ejemplifica la creacin de un proceso hijo y la obtencin del identificador de proceso para cada proceso. */ #include <stdio.h> main() { int pidP, pidH; pidH = fork(); /* Se crea el proceso hijo */ if (pidH!=0) { /* cdigo del padre */ pidP=getpid(); printf("\n Soy el padre mi identificador de proceso es:%d", pidP); printf ("\n Mi hijo tiene el pid=%d", pidH); } else{ /* cdigo del hijo */ printf("\n Soy el hijo mi pid es: %d\n", getpid()); printf("\n El pid de mi padre es: %d\n", getppid()); }

/* Programa 2 Programa que hace uso de las llamadas al sistema wait() y exit() para una comunicacin primitiva entre procesos padre e hijo */ #include <stdio.h> #include <stdlib.h> main() { int i= 10, j= 12, pid, estado; pid = fork(); /* Se crea el proceso hijo */ if (pid) { /*cdigo del padre*/ printf("\n Soy el padre y el identificador de mi proceso hijo es:%d\n", pid); printf ("\n Ahora esperare a que termine mi hijo"); wait(&estado); /* recibe el valor enviado por el hijo en la variable estado */ estado = estado >> 8; /* corrimiento de 8 bits necesario*/ printf("\n el valor que me envio mi hijo es: %d", estado); } else{ /* cdigo del hijo */ i=i+j; exit(i); /* termina el hijo y enva el valor de la variable i al padre */ }

/* Programa 3 Programa que hace uso de las llamadas al sistema wait() y exit() para una comunicacin primitiva entre el proceso padre y varios procesos hijos. Ejemplifica el uso de variables locales y globales para todos los procesos */ #include <stdio.h> #include <stdlib.h> #define NUM_PROC 5 int I = 0; void codigo_proc_hijo(int id) /*esta funcin la ejecuta cada proceso hijo */ { int i; for (i=0; i < 50; i++) printf("Proceso %d: i = %d, I = %d\n", id, i, I++); exit(id);

main() { int p, id[NUM_PROC] = {1, 2, 3, 4, 5}, pid, salida; for (p = 0; p < NUM_PROC; p++){ /* se crean los procesos hijo */ pid = fork(); if (!pid) { codigo_proc_hijo(id[p]); } } /* Esta parte solo la ejecuta el proceso padre */ for (p = 0; p < NUM_PROC; p++){ pid = wait (&salida); printf ("Proceso %d con id = %d terminado \n", pid, salida >>8); }

/* Programa 4 Programa que hace uso de la llamada al sistema exec() para cambiar el cdigo del hijo. Ejemplifica la ejecucin de comandos de Unix */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> main() { int pid; pid = fork(); /* Se crea un proceso hijo */ if (pid) { printf ("\n Esperare a que termine mi hijo"); wait(NULL); printf("\n Ya termin mi hijo); } else{ /* El cdigo del hijo se cambia por el cdigo del comando ls */ execlp("ls", "ls", "-l",(char *)0); }

/* Programa 5 Programa que hace uso de las llamadas al sistema exec(), pipe(), close() y dup(), para efectuar una comunicacin ms amplia. Ejemplifica la ejecucin de comandos de Unix con el uso del pipe */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> main() { int pid, pipefd[2]; pipe(pipefd); /*se crea el canal de comunicacin */ pid = fork(); /* Se crea el proceso hijo */ if (pid) { close(0); close(pipefd[1]); dup(pipefd[0]); execlp("wc", "wc", (char*)0); /*cambio de cdigo */ } else{ close(1); close(pipefd[0]); dup(pipefd[1]); execlp("ls", "ls", "-l",(char *)0); /*cambio de cdigo */ }

/* Programa 6 Programa que hace uso de las llamadas al sistema exec(), pipe() y close(), para efectuar una comunicacin directa. Ejemplifica el envio de mensajes tipo texto de padre a hijo. */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> main() { int pid, pipefd[2]; char mensaje1[20], mensaje2[20]; pipe(pipefd); /*se crea el canal de comunicacin */ pid = fork(); /* se crea el proceso hijo */ if (pid) { printf("\n Soy el padre, dame mensaje:"); gets(mensaje1); close(pipefd[0]); write(pipefd[1], mensaje1, strlen(mensaje1)+1); } else{ printf("\n Soy el hijo, "); close(pipefd[1]); read(pipefd[0], mensaje2, 20); printf(" mensaje recibido: %s", mensaje2); }

También podría gustarte