Annotation of os2sdk/demos/examples/pipes/pchild.c, revision 1.1

1.1     ! root        1: /***   pchild.c - child program
        !             2:  *
        !             3:  *     Example of DOSMAKEPIPE usage in parent/child communication
        !             4:  *
        !             5:  *     This is the child program which read the data sent down
        !             6:  *     from the parent in the pipe.
        !             7:  */
        !             8: #include <stdio.h>
        !             9: #include <doscalls.h>
        !            10: 
        !            11: typedef struct {
        !            12:        unsigned read_handle;           /* pipe read handle */
        !            13:        unsigned write_handle;          /* pipe write handle */
        !            14: } SharedData;
        !            15: 
        !            16: 
        !            17: main()
        !            18: {
        !            19: 
        !            20:        static char pname[] = "\\SHAREMEM\\public";   /* shared mem seg name */
        !            21:        char *written = "Writing to the child";       /* string in pipe */
        !            22:        char readin[21];                /* DosRead input buffer */
        !            23:        int retcode;                    /* holds return code from call */
        !            24:        SharedData far *fp;             /* pointer to shared memory */
        !            25:        unsigned mem_handle;            /* selector of the allocated segment */
        !            26:        unsigned buflen = 21;           /* DosRead buffer length */
        !            27:        unsigned read;                  /* number bytes read by DosRead */
        !            28: 
        !            29: 
        !            30:        /* access shared memory 'public' */
        !            31:        printf("Accessing shared memory\n");
        !            32:        retcode = DOSGETSHRSEG((char far *)pname, (unsigned far *)&mem_handle);
        !            33:        
        !            34:        /* create pointer to shared memory segment */
        !            35:        fp = (SharedData far *)((unsigned long)mem_handle << 16);
        !            36: 
        !            37:         /* read from the pipe */
        !            38:        printf("Reading from pipe\n");
        !            39:        if( retcode = DOSREAD( fp->read_handle, readin, buflen, 
        !            40:                        (unsigned far *)&read)) {
        !            41:                 printf("Read from pipe handle %d failed, retcode %d\n", 
        !            42:                    fp->read_handle, retcode);
        !            43:         }
        !            44:        else {
        !            45:                printf("DosRead read %d bytes from handle %d, retcode %d\n", 
        !            46:                    read, fp->read_handle, retcode);
        !            47: 
        !            48:                /* verify the string */
        !            49:                if ( retcode = strcmp( written, readin ) ) {
        !            50:                        printf("The child didn't read pipe data correctly");
        !            51:                        printf(", retcode %d\n", retcode);
        !            52:                        printf("read string %s\n", readin);
        !            53:                        printf("expected string %s\n", written);
        !            54:                }
        !            55:                else
        !            56:                        printf("Read pipe data ok\n");
        !            57:        }
        !            58: 
        !            59:        /* free the segment and return to parent */
        !            60:        DOSFREESEG( mem_handle );
        !            61: 
        !            62:        printf("Exiting child\n");
        !            63: 
        !            64:        /* Exit without terminating other children */
        !            65: 
        !            66:        DOSEXIT(0,0);
        !            67: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.