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.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int a,ing[50],b,tub[2];
void pedir (void)
{
int num,i,fact,j,temp;
num=10;
close(tub[0]);
do
{
printf("ingrese el numero \n");
scanf("%i",&num);
write(tub[1], &num, sizeof(int));
ing[a]=num;
a++;
for(i=num;i>0;i--)
{
fact=fact*i;
}
printf("factorial: %i \n",fact);
fact=1;
if(num<=0)
{
for(i=0;i<=a-1;i++)
{
for(j=i;j<=a-1;j++)
{
if(ing[j]<=ing[i])
{
int temp=ing[j];
ing[j]=ing[i];
ing[i]=temp;
}
}
}
printf("ordenada: \n");
for(i=0;i<a;i++)
{
printf("%i \t",ing[i]);
}
printf("\n");
}
}while(num>0);
}
void ppadre (void)
{
sleep(2);
int numl;
numl=1;
printf("ola que ase saliendose solo o que ase");
do{
int i,conta,o;
int primos[50];
int pos=0;
close(tub[1]);
for(i=1;i<=numl;i++)
{
conta=0;
for(o=1;o<=i;o++)
{
if(i%o==0)
conta++;
}
if(conta==2)
{
primos[pos]=i;
pos++;
}
}
o=1;
for(i=0;i<pos;i++)
{
if(numl%primos[i]==0)
{
o=o*primos[i];
printf("va en %i\n",o);
}
if(o==numl)
{
printf("terminado: %i\n",o);
i=pos;
}
if(i==(pos-1) && o!=numl)
{
i=-1;
}
}
}while(numl>0);
}
void main (void)
{
a=0;
pid_t pid;
pid = fork ();
pipe(tub);
switch(pid)
{
case -1: // error del fork<)
printf("error al crear el proceso\n");
break;
case 0: // proceso hijo
//printf("hijo\n");
pedir();
break;
default: // padre
//printf("yo soy tu padre\n");
ppadre;
break;
}
}
(http://i58.tinypic.com/jtpfa0.png)