直接/ dev / input / event0到STDIN

时间:2017-03-21 07:38:05

标签: redirect input ncurses

/ dev / input / event0是USB键盘 / dev / tty0是LCD屏幕。

我想将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  



重定向STDOUT正常工作。 但STDIN如何改变?

我尝试使用此命令更改STDIN:但不能正常工作...... [root@TR600-Plus ~]#./a.out /dev/input/event0>&0 > /dev/tty0

我的项目在ncurses上工作。我的目的是 getchar()可以从USB键盘获取键值。

2 个答案:

答案 0 :(得分:0)

shell命令的方向错误,例如,它应该是

./a.out < /dev/input/event0 > /dev/tty0

但是,您可以在应用程序中使用newterm获得更好的结果(并直接打开设备),而不是依靠通过shell传递流并使用initscr

答案 1 :(得分:0)

我通过pesudo终端创建 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);

```