Search code examples
cpaginationprintfposixpopen

How to do pagination in c with popen, less and fprintf (or similar)


I am reading lines from a file and I want to paginate them when displaying, using popen() and less. I haven't been able to make it work and I couldn't find any examples specific to this topic. So here I am. Minimal compilable code example would be something like this:

#include <stdlib.h>
#include <stdio.h>

int main()
{
    FILE* stream;
    
    stream = popen("less", "w");

    fprintf(stream, "Line\n");
    fprintf(stream, "Line\n");
    fprintf(stream, "Line\n");
    fprintf(stream, "Line\n");
    fprintf(stream, "Line\n");
    fprintf(stream, "Line\n");
    fprintf(stream, "Line\n");
    fprintf(stream, "Line\n");
    fprintf(stream, "Line\n");
    fprintf(stream, "Line\n");
    fprintf(stream, "Line\n");
    fprintf(stream, "Line\n");
    fprintf(stream, "Line\n");
    fprintf(stream, "Line\n");
    fprintf(stream, "Line\n");
    fprintf(stream, "Line\n");
    fprintf(stream, "Line\n");
    fprintf(stream, "Line\n");
    fprintf(stream, "Line\n");
    fprintf(stream, "Line\n");
    fprintf(stream, "Line\n");
    fprintf(stream, "Line\n");
    fprintf(stream, "Line\n");
    fprintf(stream, "Line\n");
    fprintf(stream, "Line\n");
    
    return 0;
}

How can I paginate multiple fprintf() statements like these? Is it even possible the way I'm trying or should I take another approach?

Thank you very much.


Solution

  • Ok I figured it out. I was forgetting to close the pipe stream created into less using pclose(). Adding pclose(stream) at the end solved the issue.