直接 /dev/input/event0 到 STDIN
direct /dev/input/event0 to STDIN
/dev/input/event0是usb键盘。
/dev/tty0为液晶屏。
我会 将 STDIN 重定向到 /dev/input/event0 并将 STDOUT 重定向到 /dev/tty0。
这是我的尝试:
[root@TR600-Plus ~]#./a.out > /dev/tty0
[root@TR600-Plus ~]# ls -l /proc/<pid>/fd
total 0
0 -> /dev/pts/0
1 -> /dev/tty0
2 -> /dev/pts/0
重定向标准输出有效。 但是STDIN怎么改?
我尝试使用此命令更改 STDIN: 但不起作用...
[root@TR600-Plus ~]#./a.out /dev/input/event0>&0 > /dev/tty0
我的项目在 ncurses 上工作。我的目的是getchar()可以从USB键盘获取键值。
shell 命令的方向错误,例如,它应该是这样的
./a.out < /dev/input/event0 > /dev/tty0
但是,与依赖通过 shell 传递流并使用 initscr
.[= 相比,在您的应用程序中使用 newterm
(并直接打开设备)可能会获得更好的结果。 13=]
我通过伪终端创建newterm可以解决我的目的
任务 1:
```
// create pesudo terminal
fd = open("/dev/ptmx", O_RDWR | O_NOCTTY);
grantpt(fd);
unlockpt(fd);
char *pts_name = ptsname(fd);
printf("ptsname: %s\n", pts_name);
// redirect STDIN to /dev/pts/2
dup2(fp, STDIN_FILENO);
while(1) {
getchar();
}
```
任务 2:
```
fpevent = open("/dev/input/event0", O_RDWR);
fppts = open("/dev/pts/2", O_RDONLY);
// ayalyse what key press
read(fpevent,...)
scan_code = analyse(...);
// transmission ASCII code to pesudo terminal
v_key = scan_code_2_virtual_key(scan_code);
write(fppts, v_key, 1);
```
/dev/input/event0是usb键盘。
/dev/tty0为液晶屏。
我会 将 STDIN 重定向到 /dev/input/event0 并将 STDOUT 重定向到 /dev/tty0。
这是我的尝试:
[root@TR600-Plus ~]#./a.out > /dev/tty0
[root@TR600-Plus ~]# ls -l /proc/<pid>/fd
total 0
0 -> /dev/pts/0
1 -> /dev/tty0
2 -> /dev/pts/0
重定向标准输出有效。 但是STDIN怎么改?
我尝试使用此命令更改 STDIN: 但不起作用...
[root@TR600-Plus ~]#./a.out /dev/input/event0>&0 > /dev/tty0
我的项目在 ncurses 上工作。我的目的是getchar()可以从USB键盘获取键值。
shell 命令的方向错误,例如,它应该是这样的
./a.out < /dev/input/event0 > /dev/tty0
但是,与依赖通过 shell 传递流并使用 initscr
.[= 相比,在您的应用程序中使用 newterm
(并直接打开设备)可能会获得更好的结果。 13=]
我通过伪终端创建newterm可以解决我的目的
任务 1:
```
// create pesudo terminal
fd = open("/dev/ptmx", O_RDWR | O_NOCTTY);
grantpt(fd);
unlockpt(fd);
char *pts_name = ptsname(fd);
printf("ptsname: %s\n", pts_name);
// redirect STDIN to /dev/pts/2
dup2(fp, STDIN_FILENO);
while(1) {
getchar();
}
```
任务 2:
```
fpevent = open("/dev/input/event0", O_RDWR);
fppts = open("/dev/pts/2", O_RDONLY);
// ayalyse what key press
read(fpevent,...)
scan_code = analyse(...);
// transmission ASCII code to pesudo terminal
v_key = scan_code_2_virtual_key(scan_code);
write(fppts, v_key, 1);
```