LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: wtwang1985

请教如何打开键盘的设备描述文件

[复制链接]
 楼主| 发表于 2005-9-5 11:12:51 | 显示全部楼层
那位编程书的作者想引导我们实现more的功能。他代码如下:
#include        <stdio.h>

#define        PAGELEN        24
#define        LINELEN        512

void do_more(FILE *);
int see_more(FILE *);

int main( int ac , char *av[] )
{
        FILE        *fp;

        if ( ac == 1 )
                do_more( stdin );
        else
                while ( --ac )
                        if ( (fp = fopen( *++av , "r" )) != NULL )
                        {
                                do_more( fp ) ;
                                fclose( fp );
                        }
                        else
                                exit(1);
        return 0;
}

void do_more( FILE *fp )
/*
*  read PAGELEN lines, then call see_more() for further instructions
*/
{
        char        line[LINELEN];
        int        num_of_lines = 0;
        int        see_more(FILE *), reply;
        FILE        *fp_tty;

        fp_tty = fopen( "/dev/tty", "r" );           /* NEW: cmd stream   */
        if ( fp_tty == NULL )                           /* if open fails     */
                exit(1);                           /* no use in running */

        while ( fgets( line, LINELEN, fp ) ){                /* more input        */
                if ( num_of_lines == PAGELEN ) {        /* full screen?        */
                        reply = see_more(fp_tty);  /* NEW: pass FILE *  */
                        if ( reply == 0 )                /*    n: done   */
                                break;
                        num_of_lines -= reply;                /* reset count        */
                }
                if ( fputs( line, stdout )  == EOF )        /* show line        */
                        exit(1);                        /* or die        */
                num_of_lines++;                                /* count it        */
        }
}

int see_more(FILE *cmd)                                   /* NEW: accepts arg  */
/*
*        print message, wait for response, return # of lines to advance
*        q means no, space means yes, CR means one line
*/
{
        int        c;

        printf("\033[7m more? \033[m");                /* reverse on a vt100        */
        while( (c=getc(cmd)) != EOF )                /* NEW: reads from tty  */
        {
                if ( c == 'q' )                        /* q -> N                */
                        return 0;
                if ( c == ' ' )                        /* ' ' => next page        */
                        return PAGELEN;                /* how many to show        */
                if ( c == '\n' )                /* Enter key => 1 line        */
                        return 1;               
        }
        return 0;
}


编译能够通过。但是不能打开键盘的设备描述文件。
回复 支持 反对

使用道具 举报

发表于 2005-9-5 13:41:29 | 显示全部楼层
Post by wtwang1985
谢谢。那我如何确认那一个是for键盘的呢?

你到底有没有看我的回帖?
你用过tty命令了吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-5 22:04:39 | 显示全部楼层
Post by rickxbx
你到底有没有看我的回帖?
你用过tty命令了吗?

看过阿。不过好像不能达到那位作者的目的阿
回复 支持 反对

使用道具 举报

发表于 2005-9-6 08:49:04 | 显示全部楼层
Post by wtwang1985
看过阿。不过好像不能达到那位作者的目的阿

你不是想要对tty设备文件进行读写以达到读写终端的目的吗?
在终端下:tty 得到 /dev/ttyN (N=1,2,...)
在控制台下:tty得到/dev/pts/N (N=0,1...)
对/dev/ttyN 或者/dev/pts/N 进行读写就能实现接收输入和打印输出了

如果不是这个目的,那你的目的是什么? 总要讲清楚啊
回复 支持 反对

使用道具 举报

发表于 2006-5-9 10:57:39 | 显示全部楼层
我想问怎么能屏蔽键盘的输入!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表