2016-04-01 14 views
-1

Bir program yazarak, babanın kullanıcıdan bir sayıdaki faktörleri hesaplamak için numarayı eklemesini isteyin. Bu rakam factorial.c hesaplanırC Başka bir programın sonucu işlevler ve borular ile nasıl sonuçlanırım

Yani ben yapmanız gerekenler tahmin geçerli:

numarasını okumak ve sayısını hesaplamak -Factorial.c:

kullanıcıya bir numara sormak -Peder

sayı çıktı

 // 2 Pipe and Fork created 
     if(x == 0){ //Father 

     close(p1[0]); 
     write(p1[1],&number_by_keybord, BUFFER); 
     close(p1[1]); 
     close(p[1]);  

     dup2(p[0],0); //Read the number returned by factorial.c 
     read(p[0], &num_factorial,BUFFER); 
     printf("Pipe: factorial %d\n", num_factorial);   
     close(p[0]);     
     wait(NULL); 

    }else{   
    execlp("./factorial", "factorial", NULL); 
    perror("Exec error\n"); 
    }  
yönlendirmek için

musun bir dup2 hesaplanan bilgileri -Factorial.c 0

Ve şimdi factorial.c

void main(){ 
     read(0,&num,sizeof(int)); 

     //Number calculated 

     write(1,&result,sizeof(int)); 
    return 0; 
    } 

Ama programı donuyor yürütmek ya da sadece dup2 ile herhangi problema yoktur

hesaplama rastgele sayı koyduğunuzda? Doğru sonucu elde etmeyi tahmin ediyorum dup2 (, 0) yapmak zorundayım ve faktörel bir okuma ve yazma ihtiyacım var

Teşekkür ederiz!

+0

Soru nedir? Burada herhangi bir soru görmüyorum. Sorular bir Soru İşaretiyle sona eriyor (***? ***) – abelenky

+1

Sorunu çoğaltmak için yeterli kod göstermediniz. –

+0

Geri kalan kod sadece bir yöntem oluşturmak için bir yöntem (sayı_by_keybord) ve bir factorial.c faktörü olarak hesaplamak için bir yol ... pip ve çatal oluşturmak için bir yöntemdir. factorial.c sonucunu almak için ... ama sanırım ihtiyacım yok. Sugestion? – Joseph

cevap

0
sorununuzu çoğaltmak için yeterli gösteriyor, ancak bu kodda bir sorun var görünmüyor çünkü tahmin etmek zor

: çocukta doğru yazmak (çatal 0-çocuk ve çocuk pid ebeveyndöner) bir boruya ve diğer borudan okuyabilirsiniz, ancak diğer süreçte boruları 0 dosya tanıtıcısına 0 yönlendiremezsiniz. Yazmalısınız:

... 
}else{ 
    dup2(p1[0], 0); 
    dup2(p[1], 1); 
    execlp("./factorial", "factorial", NULL); 
    perror("Exec error\n"); 
}