Annotation of os2sdk/demos/examples/pipes/pchild.c, revision 1.1.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.