Re: Some questions about linux termios

"Jonathan Isom" <[email protected]>
Newsgroups org.kernel.vger.linux-c-programming
Message-ID <[email protected]>
in Sat, Jul 12, 2008 at 12:24 PM, pei lin <[email protected]> wrote:
> Hi,buddy
>   I am puzzled by the linux termios.
>    First Question about /dev/tty0 and /dev/tty,this two devices is
> the same one?
>    When i am in X terminal,as /dev/pts/0 , i do "echo hello >
> /dev/pts/0 and echo hello > /dev/tty ", they return the same like that
> "hello" on the screen .This means /dev/tty ->/dev/pts/0? But "echo
> hello > /dev/tty0",there is nothing on the screen.And when i go to
> Init 3 mode ,like /dev/tty1,when i do "echo hello > /dev/tty1 and echo
> hello > .dev/tty and echo hello > /dev/tty0" ,They return the same all
> print hello on the screen.Do they all point to the /dev/tty1?

/dev/tty is a pointer to the current tty. whether it be /dev/tty1 or
/dev/pts/0.  when you login you are assigned a tty and if you
don't know it you can just use /dev/tty and it will open the current
tty

>    The second Question is that i write a small program to get
> keyboard input like below.When i run it in X terminal ,when i press
> keyboard it can return but can not get the press and release event.And
> in the console,like tty1,it doesn't work .i don't know why.
>
> file : get_keyboard.c
>
> #include <stdio.h>
> #include <linux/keyboard.h>
> #include <sys/ioctl.h>
> #include <fcntl.h>
> #include <linux/kd.h>
> #include <termios.h>
> #include <unistd.h>
> int main()
> {
>        int fd,len,i;
>        struct kbentry entry;
>        unsigned char buf[64];
>        struct termios  ts,old_ts;
>        char * path;
>        path = ttyname(0);
>        printf("%s!\n",path);
>        fd = open(path, O_RDONLY|O_NOCTTY);
>        if(fd < 0){
>                printf("open the device error!\n");
>        }
>
>        printf("fd --- %d!\n",fd);
>
>        if (ioctl( fd, KDSKBMODE, K_RAW ) < 0) {
>                        printf("set mode wrong!\n");
>        }
>
>
>        tcgetattr( fd, &old_ts );
>
>
>           ts = old_ts;
>     ts.c_cc[VTIME] = 0;
>     ts.c_cc[VMIN] = 1;
>     ts.c_lflag &= ~(ICANON|ECHO|ISIG);
>     ts.c_iflag = 0;
>     tcsetattr( fd, TCSAFLUSH, &ts );
>
>     tcsetpgrp( fd, getpgrp() );
>
>
>           entry.kb_table = K_NORMTAB;
>     entry.kb_value = 0;
>
>        while(1){
>                len=read(fd,buf,64);
>        printf("len ========= %d!\n",len);
>                for(i =0; i < len;i++){
>                        entry.kb_index = buf[i];
>                        if(ioctl(fd,KDGKBENT,&entry)){
>                        printf("struct entry :%d %d
> %d\n",entry.kb_table,entry.kb_index,entry.kb_value);
>                        if('2' == entry.kb_index){
>                                tcsetattr( fd, TCSAFLUSH, &old_ts );
>                                exit(0);
>                           }
>                        }
>                                      }
>                }
> }
> --
> To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in
> the body of a message to [email protected]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.