Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: jmrmcf en 22 Marzo 2015, 00:30 am



Título: Ayuda, problema para ingresar datos en tuberias.
Publicado por: jmrmcf en 22 Marzo 2015, 00:30 am
Estoy haciendo un programa al que le ingrese un numero, hay un proceso hijo que envia el numero a traves de una tuberia y obtiene e imprime el factorial del numero (cuando el numero es menor que cero imprime los numeros ingresados en orden ascendente y se sale del programa). El proceso padre recibe a traves de la tuberia y descompone el numero en multiplicaciones de numeros primos. Pero tengo un problema ENORME: no puedo ingresar el numero, el programa compila (ubuntu 14.04) y al ejecutarlo solo imprime una linea que tengo previa al scanf que simplemente indica que se ingrese el numero. Agradezco su ayuda, adjunto el codigo.
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5.  
  6. int a,ing[50],b,tub[2];
  7. void pedir (void)
  8. {
  9.        int num,i,fact,j,temp;
  10.        num=10;
  11. close(tub[0]);
  12. do
  13. {
  14.  
  15. printf("ingrese el numero \n");
  16. scanf("%i",&num);
  17. write(tub[1], &num, sizeof(int));
  18. ing[a]=num;
  19.        a++;
  20.        for(i=num;i>0;i--)
  21.        {    
  22.         fact=fact*i;
  23.        }
  24.        printf("factorial: %i \n",fact);
  25. fact=1;
  26. if(num<=0)
  27. {
  28. for(i=0;i<=a-1;i++)
  29. {
  30. for(j=i;j<=a-1;j++)
  31. {
  32. if(ing[j]<=ing[i])
  33. {
  34. int temp=ing[j];
  35. ing[j]=ing[i];
  36. ing[i]=temp;
  37. }
  38. }
  39.       }
  40. printf("ordenada: \n");
  41. for(i=0;i<a;i++)
  42.       {    
  43.         printf("%i \t",ing[i]);
  44.         }
  45. printf("\n");
  46. }
  47. }while(num>0);
  48.  
  49.  
  50.  
  51. }
  52. void ppadre (void)
  53. {
  54. sleep(2);
  55. int numl;
  56. numl=1;
  57. printf("ola que ase saliendose solo o que ase");
  58. do{
  59. int i,conta,o;
  60.       int primos[50];
  61.         int pos=0;
  62. close(tub[1]);
  63. for(i=1;i<=numl;i++)
  64.         {
  65.                conta=0;
  66.                for(o=1;o<=i;o++)
  67.                {
  68.                        if(i%o==0)
  69.                                conta++;
  70.                }
  71.                if(conta==2)
  72.                {                  
  73.                        primos[pos]=i;
  74.                        pos++;      
  75.                }  
  76.         }
  77.         o=1;
  78.         for(i=0;i<pos;i++)
  79.         {
  80.                if(numl%primos[i]==0)
  81.                {
  82.                        o=o*primos[i];
  83. printf("va en %i\n",o);
  84.              }
  85.        if(o==numl)
  86.        {
  87.         printf("terminado: %i\n",o);
  88.                i=pos;
  89.        }
  90. if(i==(pos-1) && o!=numl)
  91. {
  92. i=-1;
  93. }
  94.        }
  95. }while(numl>0);
  96. }
  97. void main (void)
  98. {
  99.  
  100. a=0;
  101. pid_t pid;
  102. pid = fork ();
  103. pipe(tub);
  104. switch(pid)
  105. {
  106. case -1: // error del fork<)
  107. printf("error al crear el proceso\n");
  108. break;
  109. case 0: // proceso hijo
  110. //printf("hijo\n");
  111. pedir();
  112. break;
  113. default: // padre
  114. //printf("yo soy tu padre\n");
  115. ppadre;
  116. break;
  117.  
  118. }
  119. }
(http://i58.tinypic.com/jtpfa0.png)