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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Anillo de procesos circulares
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Anillo de procesos circulares  (Leído 4,852 veces)
smasher666

Desconectado Desconectado

Mensajes: 76


Ver Perfil
Anillo de procesos circulares
« en: 10 Mayo 2010, 15:00 pm »

Hola, estoy haciendo los "deberes " de la universidad, me piden hacer un anillo de procesos utilizando fork, el problema viene en que no tengo muy claro como hacerlo, de momento tengo hecho un bucle donde hacemos fork a un proceso para irlo duplicando , antes del primer fork, creamos una pipe donde el padre cerrara la entradas y el hijo la salida, para cerrar el circulo, creamos un pipe secundario que se ira arrastrando hacta la ultima iteracion, el problema viene que no se acavarlos de conectar, no se si una vez hecho el fork, cerrar la entrada del pipe, y crear uno nuevo o como hacerlo, solo es esa duda, no pido que me hagais el ejercicio hombre que si no no aprendo.

pd: He buscado en google, y en el buscador de el foro, he buscado hasta debajo de una col.

gracias por adelantado

pdd: antes de que lo pongais vosotros: http://lmgtfy.com/?q=ring+of+n+process


En línea

biribau

Desconectado Desconectado

Mensajes: 181


Ver Perfil
Re: Anillo de procesos circulares
« Respuesta #1 en: 10 Mayo 2010, 17:27 pm »

Hay que hacer 2 cosas, leer del pipe con el padre y escribir en el pipe del hijo, pero podemos utilizar sólo una variable pipe, ponemos un while de procesos, en el padre terminamos con break y escribimos en el pipe del hijo, en el proceso hijo leemos del pipe, procesamos y seguimos iterando, al iterar se machaca el pipe haciendo que sea del nuevo hijo, para una entrada entera:
[spoiler]
Código
  1. int main() {
  2. while(num--) { //num = numero de procesos
  3. pipe(mipipe);
  4. if(pid = fork()) { //hijo
  5. read(mipipe[0], &ini, sizeof(int)); //leemos del pipe del padre
  6. printf("Leido %d\n", ini);
  7. ini++; //procesamos
  8. }
  9. else { //padre
  10. write(mipipe[1], &ini, sizeof(int)); //escribimos en el pipe del hijo
  11. break; //acabamos la iteración
  12. }
  13. }
  14. }
  15.  
[/spoiler]
Faltaría cerrar los pipes si quieres pa hacerlo bien


En línea

smasher666

Desconectado Desconectado

Mensajes: 76


Ver Perfil
Re: Anillo de procesos circulares
« Respuesta #2 en: 10 Mayo 2010, 18:26 pm »

Gracias por la repsuesta, no era bien bien lo que necesitava, pero por algo se empieza, de todas formas creo que y alo tengo, posteare la solucion cuando lo tenga, merci
En línea

biribau

Desconectado Desconectado

Mensajes: 181


Ver Perfil
Re: Anillo de procesos circulares
« Respuesta #3 en: 10 Mayo 2010, 19:11 pm »

Perdón, no había leído bien xD
Me ha costado, pero se hace muy bien si haces un diagrama de como van forkeando los procesos, y las pipes que se crean y como se conectan
Esto circula con un entero que van incrementando cada uno, el primero se lo inyecta a sí mismo el entero
Código
  1.        pipe(primera_pipe);
  2. write(primera_pipe[1], &ini, sizeof(int));
  3. mipipe[0] = primera_pipe[0];
  4. mipid = getpid();
  5. while(num--) {
  6. pipe(pipe_hijo);
  7. if(pid = fork()) {
  8. mipipe[0] = pipe_hijo[0];
  9. mipid = pid;
  10. } else {
  11. mipipe[1] = pipe_hijo[1];
  12. while(1) {
  13. read(mipipe[0], &ini, sizeof(int));
  14. printf("Leido %d en el proceso %d\n", ini, mipid);
  15. ini++;
  16. write(mipipe[1], &ini, sizeof(int));
  17. }
  18. }
  19. }
  20. mipipe[1] = primera_pipe[1];
  21. while(1) {
  22. read(mipipe[0], &ini, sizeof(int));
  23. printf("Leido %d en el proceso %d\n", ini, mipid);
  24. ini++;
  25. write(mipipe[1], &ini, sizeof(int));
  26. }
  27.  
« Última modificación: 10 Mayo 2010, 19:14 pm por biribau » En línea

biribau

Desconectado Desconectado

Mensajes: 181


Ver Perfil
Re: Anillo de procesos circulares
« Respuesta #4 en: 10 Mayo 2010, 19:13 pm »

:-[ di a modificar en lugar de editar
En línea

smasher666

Desconectado Desconectado

Mensajes: 76


Ver Perfil
Re: Anillo de procesos circulares
« Respuesta #5 en: 11 Mayo 2010, 11:23 am »

gracias biribau, ha sido de mucha ayuda enserio, ya esta todo resuelto
En línea

smasher666

Desconectado Desconectado

Mensajes: 76


Ver Perfil
Re: Anillo de procesos circulares
« Respuesta #6 en: 11 Mayo 2010, 15:08 pm »

bueno, tengo otro pequeño problema, modificando un poco el codigo que me has proporcionado, he abierto antes de hacer el for principal , un archivo del cual quiero que cada proceso cuando tenga el testigo , lea un caracter, de tal forma que hago fopen("entrada.txt","r"); y luego hago fscanf.. el problema es que solo lee el primer proceso, es decir, el primer proceso lee el primer caracter pero el resto lee caracteres vacios, porque puede ser??

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Descubren un anillo de antimateria que rodea la Tierra « 1 2 »
Foro Libre
ShotgunLogic 17 7,981 Último mensaje 29 Agosto 2011, 13:00 pm
por P-Joe
Algortimos de euclides usando listas circulares
Programación C/C++
imperio7 3 1,899 Último mensaje 22 Septiembre 2013, 08:53 am
por eferion
Un anillo para controlar el móvil
Noticias
wolfbcn 0 996 Último mensaje 10 Diciembre 2013, 01:34 am
por wolfbcn
dependencias circulares
Programación C/C++
kilodepala2 6 2,828 Último mensaje 11 Mayo 2016, 16:38 pm
por kilodepala2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines