完全披露,这是我的计算机安全类介绍的作业。
我们正在创建一个猜谜游戏(请参阅下面的提问者),询问用户的姓名,然后猜测幻数。在告诉用户他们的猜测是否太高,太低或正确时,程序退出,就这么简单。作业的第二部分是创造一个" 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;
}
答案 0 :(得分:1)
Linux中的双向管道有点棘手。最简单的方法可能是使用FIFO,它是一个具有文件名的管道。您仍然可以将|
管道用于一个方向:
mkfifo my_fifo
./questioner < my_fifo | ./guesser > my_fifo