in Sat, Jul 12, 2008 at 12:24 PM, pei lin <telent998@xxxxxxxxx> 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 majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html