저주 프로그램에 대한 파이프 입력

저주 프로그램에 대한 파이프 입력

ncurses 라이브러리는 대화형 사용자 인터페이스를 제공합니다. 그런데 프로그램에 뭔가를 입력하면 어떻게 되는지 알고 싶습니다. 그래서 나는 이것을 시도합니다 :

# echo foo | my_curses_prog

항상 표준 입력에 보류 중인 입력이 있는 것 같지만 getch아무것도 읽을 수 없습니다. 그렇다면 뒤에서 무슨 일이 벌어지고 있는 걸까요?


업데이트된 테스트 프로그램:

#include <ncurses.h>

int main()
{
    WINDOW *win = initscr();
    nodelay(win, 0);
    refresh();
    FILE *fp = fopen("my_curses_prog.log", "w");
    while (1) {
        int ch = getch();
        fprintf(fp, "%d\n", ch);
        fflush(fp);
    }
    fclose(fp);
    endwin();
    return 0;
}

답변1

저주 애플리케이션을 사용하여 초기화할 수 있습니다.initscr또는newterm. 전자는 읽는다표준 입력오직 후자만이 다른 입력을 사용하도록 지시받을 수 있습니다. 저주 애플리케이션이 파이프에서 데이터를 읽도록 하려면 다음을 사용할 수 있습니다.newterm(대화이 작업을 수행).

저주는 입력이 다음과 같을 것으로 예상합니다.단말기. 파이프는 버퍼링되어 있고 다른 것으로 변경할 수 없기 때문에 터미널처럼 작동하지 않습니다.오리지널 모드사용표준 터미널 I/O수신 전화. 입력은 다음과 같으므로버퍼링됨, 유용한 일이 많이 발생하는 것을 볼 수 없습니다getch전체 버퍼를 읽을 수 있을 때까지(테스트 방법에 따라 많은 문자 또는 개행 문자까지).

관련 정보