Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 两个同时运行的linux程序和按键捕捉_C_Linux - Fatal编程技术网

C 两个同时运行的linux程序和按键捕捉

C 两个同时运行的linux程序和按键捕捉,c,linux,C,Linux,我有一个在Raspberry Pi(linux)上运行的OpenVG数字看板应用程序。不幸的是,让它在一个循环中全屏显示.jpg背景会大大降低速度 所以我选择了透明的背景和运行在第1层的OpenVG程序。然后,我还启动了FBI(一个在帧缓冲区中显示图像的shell程序)。这样我就有了同样的视觉效果,但OpenVG程序的运行速度也大大提高了,就像一个覆盖层一样,这在我的例子中非常重要。要同时启动两个程序,我使用以下命令: fbi -noverbose bg.jpg | ./digital-sign

我有一个在Raspberry Pi(linux)上运行的OpenVG数字看板应用程序。不幸的是,让它在一个循环中全屏显示.jpg背景会大大降低速度

所以我选择了透明的背景和运行在第1层的OpenVG程序。然后,我还启动了FBI(一个在帧缓冲区中显示图像的shell程序)。这样我就有了同样的视觉效果,但OpenVG程序的运行速度也大大提高了,就像一个覆盖层一样,这在我的例子中非常重要。要同时启动两个程序,我使用以下命令:

fbi -noverbose bg.jpg | ./digital-signage
(-noverbose参数使fbi不显示UI,只显示全屏图像)

问题是,我希望能够在我的OpenVG应用程序中捕获和处理按键。它的代码如下所示:

void changemode(int dir) {
    static struct termios oldt, newt;

    if (dir == 1) {
        tcgetattr( STDIN_FILENO, &oldt);
        newt = oldt;
        newt.c_lflag &= ~( ICANON | ECHO );
        tcsetattr( STDIN_FILENO, TCSANOW, &newt);
    } else {
        tcsetattr( STDIN_FILENO, TCSANOW, &oldt);
    }   
}

int kbhit(void) {
    struct timeval tv;
    fd_set rdfs;

    tv.tv_sec = 0;
    tv.tv_usec = 0;

    FD_ZERO(&rdfs);
    FD_SET(STDIN_FILENO, &rdfs);

    select(STDIN_FILENO+1, &rdfs, NULL, NULL, &tv);
    return FD_ISSET(STDIN_FILENO, &rdfs);
}

int main(int argc, char **argv) {
    char key = 0;

    changemode(1);
    while (!kbhit()) {
        // do the rendering here until a key is pressed
    }
    key = getchar();
    changemode(0);
    finish(); 

    printf("%c", key);
    return 0;
}
如您所见,程序将循环,直到检测到按键,然后回显按键并退出。当我只运行OpenVG应用程序时,它工作正常:

./digital-signage
但是当我这么做的时候

fbi -noverbose bg.jpg | ./digital-signage
键总是错误的,因为fbi似乎捕捉到了输入(而且它正确地捕捉到了,因为它对键盘快捷键有反应)程序退出,但检测到不正确的密钥。


我的问题是我不需要fbi对任何事情做出反应。我需要我的OpenVG应用程序来正确处理按键。有什么方法可以实现吗?

fbi-noverbose bg.jpg的数字标牌有什么问题?ioctl VT_GETSTATE:设备的ioctl不合适(不是linux控制台?)OpenVG应用程序启动了,但fbi没有启动。那么,fbi-noverbose bg.jpg&然后是
/digital signage
?在第一个命令后,屏幕变为空白,我除了重新启动Pi外,什么也做不了。