This example handles the client side of a pipe. It opens an existing named pipe, sets and queries the pipe handle state, sends a message to the host, reads the host reply, and finally closes the pipe.
Before running this example, compile and run the example code shown in the DosConnectNPipe, DosCreateNPipe, DosDisConnectNPipe, or DosSetNPipeSem functions, which handles the host side of the pipe.
#define INCL_DOSFILEMGR /* DOS File Manager values */ #define INCL_DOSNMPIPES /* DOS Named Pipes values */ #define INCL_DOSSEMAPHORES /* DOS Semaphore values */ #define INCL_DOSERRORS /* DOS Error values */ #include <os2.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main(VOID) { APIRET rc = NO_ERROR; /* Return code */ CHAR message[256] = ""; /* Message buffer */ HFILE PipeHandle = NULLHANDLE; /* Pipe handle */ struct _AVAILDATA BytesAvail = {0}; UCHAR Buffer[200] = {0}; ULONG bytes = 0; ULONG Action = 0; ULONG PipeState = 0; ULONG HandType = 0; ULONG FlagWord = 0; ULONG BytesRead = 0; rc = DosOpen("\\PIPE\\EXAMPLE", &PipeHandle, &Action, 0, 0, FILE_OPEN, OPEN_ACCESS_READWRITE | OPEN_SHARE_DENYREADWRITE | OPEN_FLAGS_FAIL_ON_ERROR, NULL); if (rc != NO_ERROR) { printf("DosOpen error: error code = %u\n", rc); return 1; } else printf("Connected to HOST\n"); rc = DosSetNPHState(PipeHandle, NP_WAIT); if (rc != NO_ERROR) { printf("DosSetNPHState error: error code = %u\n", rc); return 1; } rc = DosQueryNPHState(PipeHandle, &PipeState); if (rc != NO_ERROR) { printf("DosQueryNPHState error: error code = %u\n", rc); return 1; } else { printf("Pipe handle state is: %x\n", PipeState); } /* endif */ printf("Enter message to send to PIPEHOST: "); fflush(NULL); /* Force above printf prompt to display */ gets(message); rc = DosWrite(PipeHandle, message, strlen(message), &bytes); if (rc != NO_ERROR) { printf("DosWrite error: error code = %u\n", rc); return 1; } rc = DosRead(PipeHandle, message, sizeof(message), &bytes); if (rc != NO_ERROR) { printf("DosRead error: error code = %u\n", rc); return 1; } printf("\nMessage received from PIPEHOST was: %s\n\n", message); rc = DosClose(PipeHandle); /* Should check if (RC == NO_ERROR) here... */ printf("...Disconnected\n"); return NO_ERROR; }