Re: Capture console app output into texview?



Hi,

thanks a lot for that explanation. I'll try to combine this into the
code from Dov.

Till

Am Samstag 21 November 2009 schrieb Artur Galjamov:
Hi,

After exec(), child clib's startup routine determines buffering mode for
stdout (i.e. calls fdopen(1, "w+")). You can setup pseudo-terminal instead
of pipe, to make child's stdout line-buffered.


optimistic snippet:
=====================================================================
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int
main(int argc, char *argv[])
{
    int      master_fd, slave_fd;
    FILE    *master_file, *slave_file;
    char     buf[80], *device;

    master_fd = posix_openpt(O_RDWR | O_NOCTTY);

    grantpt(master_fd);
    unlockpt(master_fd);

    slave_fd = open(device = ptsname(master_fd), O_RDWR | O_NOCTTY);

    printf("slave device: %s\n", device);

    master_file = fdopen(master_fd, "r");
    slave_file = fdopen(slave_fd, "w+");

    if (fork()) {
        fclose(slave_file);
        while (fgets(buf, sizeof(buf), master_file))
            printf("parent got: %s", buf);

    } else {
        // child
        fclose(master_file);
        for (int i = 0; i < 500; i++) {
            sleep(1);
            fprintf(slave_file, "child's data (%d)\n", i);
        }
    }

    return 0;
}
=====================================================================



21.11.09, 09:39, "Till Harbaum / Lists" <lists harbaum org>:

Hi,
thanks again for that hint. Unfortunately adding 
     /* switch to line buffered mode */
    if(setvbuf(fh, NULL, _IOLBF, 0))
                    perror("setvbuf(_IOLBF)");
to the program posted by Dov doesn't change anything.
Are there limitations on changing the buffer mode? E.g.
only the transmitter side can do that?





[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]