连接两个同步C程序

时间:2012-01-13 19:08:19

标签: c

我必须知道如何通过在它们之间连接第三个Java / C程序来同时连接两个简单运行的C程序的输入和输出。

我曾尝试通过管道,套接字和客户端连接,但它对于只使用scanf()和printf()的简单运行C程序没有帮助

示例程序: 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;
}

我的目标是在第三个Java或C程序的帮助下,将program1.c的stdin和stdout与program2.c的stdin和stdout连接

2 个答案:

答案 0 :(得分:2)

基本上,你会想做这样的事情:

  • “Program3”会创建pipe
  • 计划3调用fork,并在孩子中更改pipe的FD stdout,然后exec的Program2;
  • 程序3然后更改pipe的{​​{1}}和stdin的Program1

答案 1 :(得分:1)

您应该使用forkexec
编写第三个C程序,打开两个管道(使用pipe)。这为您提供了4个文件描述符(2个输入,2个输出) 然后它分叉 - 孩子将在以后运行program1和父程序2(反之亦然 - 无关紧要) 每个子节点将关闭2个文件描述符,并保留一个输入和一个输出(但不是同一个管道)。他们还应关闭标准输入和输出 然后使用dup2函数使管道fds变为0和1 现在你有两个进程,一个stdin通过管道连接到另一个stdout,反之亦然 最后一个阶段是使用exec来制作program1program2