Ncurses and Linux pipeline

前端 未结 2 1157
被撕碎了的回忆
被撕碎了的回忆 2021-01-15 15:00

I\'d like to write a simple program using ncurses for displaying some data. I would then like for the program to write to stdout in such a way that I can then use a pipe (|

2条回答
  •  野趣味
    野趣味 (楼主)
    2021-01-15 15:28

    This is 5 years old now and you've probably moved on, but this was the top of my search results so I thought I'd add the solution I found. After a lot of messing about with trying to get pipes to work in code like bash example above, I finally found someone that hinted in the right direction with the newterm command. The only trick is to open a new tty and to use newterm instead of initscr:

    #include  
    #include 
    
    int main(int argc, char ** argv) {
    
      FILE *f = fopen("/dev/tty", "r+");
      SCREEN *screen = newterm(NULL, f, f);
      set_term(screen);
    
      //this goes to stdout
      fprintf(stdout, "hello\n");
      //this goes to the console
      fprintf(stderr, "some error\n");
      //this goes to display
      mvprintw(0, 0, "hello ncurses");
      refresh();
      getch();
      endwin();
    
      return 0;
    }
    

    With this you can pipe stdout and stderr wherever you want but have an ncurses session. I'm not sure how portable it is or if there are any other catches, just glad to find a solution that worked.

提交回复
热议问题