questions about linux termios

"pei lin" <[email protected]>
Newsgroups gmane.linux.console,gmane.linux.assembly
Message-ID <[email protected]>
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?

   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-console" 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.