2012-01-13 45 views
2

我必須知道如何通過連接第三個Java/C程序來同時連接兩個簡單運行的C程序的輸入和輸出。連接兩個同步C程序

我已經通過管道,插座和客戶端的連接嘗試,但它不可能是一個簡單的運行C程序中唯一的scanf()和printf()用於

樣例程序有所幫​​助: Program1.c

#include<stdio.h> 
int main(int argc,char *argv[]) 
{ 
    int a; 
    while(1) 
    { 
    scanf("%d",&a); 
    printf("%d",a); 
    } 
    return 0; 
} 

program2.c

#include<stdio.h> 
int main(int argc,char *argv[]) 
{ 
    int a; 
    while(1) 
    { 
    scanf("%d",&a); 
    printf("%d",a); 
    } 
    return 0; 
} 

我的目標是program1.c的stdin和stdout與program2.c的stdin和stdout的幫助連接第三Java或C程序

回答

1

,你應該使用forkexec
寫第三個C程序(使用pipe),這將打開兩個管道。這給你4個文件描述符(2個輸入,2個輸出)。
然後它分叉 - 孩子以後將運行program1和父程序2(反之亦然 - 無所謂)。
每個孩子將關閉兩個文件描述符,並保留一個輸入和一個輸出(但不是同一管道)。他們也應該關閉標準的輸入和輸出。
然後使用dup2函數使管道fds變爲0和1.
現在你有兩個進程,一個的stdin通過管道連接到另一個的stdout,反之亦然。
最後一步是使用exec來運行program1program2

+0

我想第三方案的樣品用於連接兩個方案。我無法讓程序代碼同時運行兩個程序。 – Terminators 2012-01-17 18:11:24

2

從本質上講,你會想要做這樣的事情:

  • 「節目3」創建pipe
  • 計劃3個電話fork,在孩子,改變了pipe的爲FD stdout,然後exec的Program2;
  • 計劃3然後改變了pipestdinexec的PROGRAM1
+0

是的先生/我想要做這樣的事情,只有我想要得到在Java/C的情況下使用的代碼的大綱 – Terminators 2012-01-14 07:53:45