将两个程序连接在一起C Linux

时间:2018-01-14 20:59:36

标签: c linux stdout stdin piping

完全披露,这是我的计算机安全类介绍的作业。

我们正在创建一个猜谜游戏(请参阅下面的提问者),询问用户的姓名,然后猜测幻数。在告诉用户他们的猜测是否太高,太低或正确时,程序退出,就这么简单。作业的第二部分是创造一个" guesser"玩我们的猜谜游戏的程序(见下面的guesser.c),这就是我的问题所在。提问者的输出被输入到猜测者的输入中,而猜测者的输出被输入到提问者的输入中。

我已经尝试了#34; ./提问者| ./guesser"在终端上,但程序似乎并没有意识到彼此,也没有像我希望的那样一起使用stdin或stdout。我觉得我错过了令人沮丧的基本事情,但我感到很茫然,并且感谢任何帮助,而不是给予帮助。

提问者文件:

int main(){

  int magic = 2936;
  char name[30];
  char temp[30];
  int answer;

  fputs("What is your name?\n", stdout);
  fgets(name, 30, stdin);

  fputs("What is the magic number, test?\n", stdout);
  fgets(temp, 10, stdin);

  answer = strtol(temp, NULL, 0);

  if(answer < magic){
    fputs("TOO LOW\n", stdout);
    return -1;
  }
  if(answer > magic){
    fputs("TOO HIGH\n", stdout);
    return -1;
  }
  if(answer == magic){
    fputs("SUCCESS\n", stdout);
    return 0;
  }
}

guesser.c文件:

int main(){
  char input[50];

  fgets(input, 50, stdin);

  if(strcmp(input, "What is your name?") == 0){
    fputs("AndyG\0\n", stdout);
  }
  else
    fputs("???\0\n", stdout);

  fgets(input, 50, stdin);

  if(strcmp(input, "What is the magic number, AndyG?")){
    fputs("2936\0\n", stdout);
  }
  else
    fputs("???\0\n", stdout);

  return 0;
}

1 个答案:

答案 0 :(得分:1)

Linux中的双向管道有点棘手。最简单的方法可能是使用FIFO,它是一个具有文件名的管道。您仍然可以将|管道用于一个方向:

mkfifo my_fifo
./questioner < my_fifo | ./guesser > my_fifo