以下内容来自 beginning linux programming
/dev/tty 指向当前终端或当前的登陆会话,可将它当作文件一样操作
代码:menu1.c
#include <stdio.h>
#include <stdlib.h>
char *menu[] = {
"a - add new record",
"d - delete record",
"q - quit",
NULL,
};
int getchoice(char *greet,char *choices[],FILE *in, FILE*out);
int main()
{
int choice = 0;
FILE * in;
FILE * out;
in = fopen("/dev/tty","r");
out = fopen("/dev/tty","w");
if(!in||!out)
{
fprintf(stderr,"fail to open /dev/tty\n");
exit(1);
}
if(!isatty(fileno(stdout)))
fprintf(stderr,"You are not a terminal!\n");
// exit(1);
}
do
{
choice=getchoice("please select an action",menu,in,out);//,out);
printf("you have chosen: %c\n",choice);
}while(choice != 'q');
exit(0);
}
int getchoice(char *greet,char *choices[],FILE * in,FILE *out)
{
int chosen = 0;
int selected;
char **option;
do{
fprintf(out,"choice: %s\n",greet);
option=choices;
while(*option) //print menu
{
//printf("%s\n",*option);
fprintf(out,"%s\n",*option);
option++;
}
do{
selected = fgetc(in);
//selected = getchar();
}while(selected == '\n'); //encounter '\n' then loop on and on
option = choices;
while(*option)
{
if(selected == *option[0])
{
chosen = 1;
break;
}
option++;
}
if(!chosen)
{
fprintf(out,"incorrect choice,select again\n");
}
}while(!chosen);
return selected;
}
gcc menu1.c -o t
./t >file
菜单依然在终端显示,但你的选择(You have chosen:a)会定向到file文件中。