Using more as an output filter via popen - pipe buffering

John Curran jcurran at bbn.com
Sun Jun 23 14:43:34 AEST 1991


I'm looking for advice on how to utilize "more" from within a program
as an output filter.  I tried the following code segment:
 
pager = popen("{PAGER-more}","w");
for (...) {
  putc(ch++,pager)
}

This works, except that when more displays the output, it is not
possible to stop the display via the "q" command. I added a SIGPIPE
handler to longjmp and close the pipe, but that did not change the
results.  I reduced the amount of buffered data by switching to
write(fileno(pager),ch,1), but it still does not stop for files
over 8K.  Am I right in assuming that this is a result of the 
internal buffering in pipes?  Is there a method to force a
smaller pipe buffer? 
 
Thanks,
/John



More information about the Comp.unix.wizards mailing list