Chinaunix首页 | 论坛 | 博客
  • 博客访问: 19743127
  • 博文数量: 679
  • 博客积分: 10495
  • 博客等级: 上将
  • 技术积分: 9308
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-18 10:51
文章分类

全部博文(679)

文章存档

2012年(5)

2011年(38)

2010年(86)

2009年(145)

2008年(170)

2007年(165)

2006年(89)

分类: LINUX

2008-12-05 10:03:32

§5.2  终端对话

       写入/dev/tty可以在重定时依旧输出到当前屏幕。

实例:

# cat menu3.c

#include

#include

#include

 

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 *input;

    FILE *output;

 

    if (!isatty(fileno(stdout))) {

        fprintf(stderr,"You are not a terminal, OK.\n");

    }

 

    input = fopen("/dev/tty", "r");

    output = fopen("/dev/tty", "w");

    if(!input || !output) {

        fprintf(stderr,"Unable to open /dev/tty\n");

        exit(1);

    }

 

    do {

        choice = getchoice("Please select an action", menu, input, output);

        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) {

            fprintf(out,"%s\n",*option);

            option++;

        }

        do {

            selected = fgetc(in);

        } while (selected == '\n');

        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;

}

 

运行的结果:

# ./menu3 > file 2>&1

Choice: Please select an action

a - add new record

d - delete record

q - quit

a

Choice: Please select an action

a - add new record

d - delete record

q - quit

d

Choice: Please select an action

a - add new record

d - delete record

q - quit

q

 

# cat file

You are not a terminal, OK.

You have chosen: a

You have chosen: d

You have chosen: q

阅读(3255) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~