Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2038625
  • 博文数量: 414
  • 博客积分: 10312
  • 博客等级: 上将
  • 技术积分: 4921
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-31 01:49
文章分类

全部博文(414)

文章存档

2011年(1)

2010年(29)

2009年(82)

2008年(301)

2007年(1)

分类: C/C++

2008-03-11 10:15:53

    用ioctrl把标准输入的i/o选项修改下就行了. 如:
    tty_state.sg_flags = RAW;
    if (ioctl(0,TIOCSETP,(char *) &tty_state) == -1)

UNIX环境下,当遇到大数据量的输出时,一般会添加这样一个功能——按任意键继续……。这一功能的实现是不是像下面这段代码那么简单呢?

#include

main()

{

       printf(“按任意键继续……\n”);

       getchar();

       printf(“按任意键继续……\n”);

       getchar();

}

调试一下,你会发现,每次输入必须键入回车后才能生效,于是我们的 “按任意键继续……”就不如改成“按ENTER键继续……”更名副其实了。但是处于负责的态度,我们还是应该考虑如何实现“按任意键继续……”。这里涉及到对输入终端的设置问题,下面这段简单代码将会告诉我们具体实现步骤:

#include

#include

 

main(argc, argv)

int argc;

char **argv;

{

        struct sgttyb sgo,sgn;

        struct tchars tco,tcn;

/*获取当前模式和设置*/

        ioctl(0, TIOCGETP, &sgo);

        ioctl(0, TIOCGETC, &tco);

 

        sgn = sgo;

        sgn.sg_flags&=~ECHO;/*关闭ECHO*/

        sgn.sg_flags |= CBREAK;/*打开CBREAK*/

 

        tcn = tco;

        tcn.t_intrc = -1;/*使中断键失效*/

/*保存新的模式和设置*/

 

        ioctl(0, TIOCSETP, &sgn);

        ioctl(0, TIOCSETC, &tcn);

/*添加按任意键继续……功能*/

       printf(“按任意键继续……\n”);

       getchar();

       printf(“按任意键继续……\n”);

       getchar();

 

/*重置旧的模式和设置*/

        ioctl(0, TIOCSETP, &sgo);

        ioctl(0, TIOCSETC, &tco);

        exit(0);

}

好了现在我们的按任意键继续……”可以放心运行了。

以上代码在UNIX AIX 4.3.0下调试通过。

 

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