从curses界面,用户可以分叉feh实例来查看图像。 curses 界面有
hjkl
导航,在查看图像时不应被阻止。
void display_file(void) {
def_prog_mode();
endwin();
pid_t pid = fork();
if (!pid) {
execl("/usr/bin/feh", "feh", "/home/abc/main/violet.jpg", NULL);
}
reset_prog_mode();
wrefresh(state_of_curses.a_win);
wrefresh(state_of_curses.b_win);
}
这将打开 feh,当 feh 是活动窗口时,
hjkl
导航仅影响 feh(正常)。但是当curses终端处于活动状态时,所有键似乎都会随机发送到curses或feh(即hjkl
可能会移动图像,而它应该只影响curses)。
为什么会这样?什么才是正确的方法才能达到预期的效果?
execl("/bin/bash", "bash", "-c", "feh /home/abc/main/violet.jpg &", NULL);
。Fork 为子进程提供与父进程相同的打开文件描述符。因此,任何发送到curses的角色也将被发送到feh。 防止写入到孩子的 STDIN 来解决问题。
void display_file(void) {
def_prog_mode();
endwin();
pid_t pid = fork();
if (!pid) {
int fd = open("/dev/null", O_RDONLY);
dup2(fd, STDIN_FILENO);
close(fd);
execl("/usr/bin/feh", "feh", "/home/abc/main/violet.jpg", NULL);
}
reset_prog_mode();
wrefresh(state_of_curses.a_win);
wrefresh(state_of_curses.b_win);
}