VMS Help  —  CRTL  decc$set_child_standard_streams, Example
        parent.c

        #include <stdio.h>
        #include <string.h>
        #include <unistd.h>

        int decc$set_child_standard_streams(int, int, int);

        main()
        {
            int fdin[2], fdout[2], fderr[2];
            char msg[] = "parent writing to child's stdin";
            char buf[80];
            int nbytes;

            pipe(fdin);
            pipe(fdout);
            pipe(fderr);

            if ( vfork() == 0 ) {
           decc$set_child_standard_streams(fdin[0], fdout[1], fderr[1]);
              execl( "child", "child" );
            }
            else {
                write(fdin[1], msg, sizeof(msg));
                nbytes = read(fdout[0], buf, sizeof(buf));
                buf[nbytes] = '\0';
                puts(buf);
                nbytes = read(fderr[0], buf, sizeof(buf));
                buf[nbytes] = '\0';
                puts(buf);
            }
        }

        child.c

        #include <stdio.h>
        #include <unistd.h>

        main()
        {
            char msg[] = "child writing to stderr";
            char buf[80];
            int nbytes;

            nbytes = read(0, buf, sizeof(buf));
            write(1, buf, nbytes);
            write(2, msg, sizeof(msg));
        }

        child.com

        $ read sys$command s
        $ write sys$output s
        $ write sys$error "child writing to stderr"

      This example program returns the following for both child.c and
      child.com:

        $ run parent
        parent writing to child's stdin
        child writing to stderr

      Note that in order to activate child.com, you must explicitly
      specify execl("child.com", ...) in the parent.c program.
Close Help