ncurses ライブラリとの混合freopen
に問題があります。stdin
私がやっていることは、stdin をファイルに再度開き、それを flex+bison で解析してから、元に戻して ncurses を開始することです。
スワップのコードは次のとおりです。
void switchStdin(const char *newStream) {
fflush(stdin);
fgetpos(stdin, &pos);
fd = dup(fileno(stdin));
freopen(newStream, "r", stdin);
}
void revertStdin() {
fflush(stdin);
dup2(fd, fileno(stdin));
close(fd);
clearerr(stdin);
fsetpos(stdin, &pos);
}
私のレクサーでは、これが私がしていることです:
void parse() {
Utils::switchStdin("./filename.ext");
yyparse();
Utils::revertStdin();
}
メインファイルでは、次のようなことをします
parse();
initscr();
keypad(stdscr, TRUE);
noecho();
cbreak();
...
ここで、コメントしないとrevertStdin
、起動時に停止するだけです。代わりにコメントすると、解析は機能しますが、ncurses GUI は応答せず、時々点滅します。
両方の部分は独立して使用すると機能するため、それらを順次混合する際に、私が見逃しているいくつかの注意点があると思います. 誰も手がかりを持っていますか?