This example creates and opens a named queue. It writes a message to it, peeks the message, and finally closes it.

#define INCL_DOSQUEUES   /* DOS Queue values */
#define INCL_DOSPROCESS  /* DOS thread and process values */
#define INCL_DOSERRORS   /* DOS error values */
#include <os2.h>
#include <stdio.h>
#include <string.h>

int main(VOID) {

   PSZ         szQueueName  = "\\QUEUES\\AnyQueueNameHere";
   HQUEUE      hqAnyQueue   = NULLHANDLE; /* Queue handle                   */
   PSZ         DataBuffer   = "";         /* Data buffer for queue data     */
   REQUESTDATA Request      = {0};        /* Request                        */
   ULONG       ulDataLen    = 0,          /* Length of data returned        */
               ulElemCode   = 0;          /* Element code (input/output)    */
   BYTE        ElemPrty     = 0;          /* Priority of element (returned) */
   APIRET      rc           = NO_ERROR;   /* Return code                    */
   rc = DosCreateQueue(&hqAnyQueue,      /* Queue handle                    */
             QUE_FIFO |                  /* First-In First-Out order        */
             QUE_CONVERT_ADDRESS,        /* Convert 16-bit addresses to 32  */
             szQueueName);               /* Name of the queue to create     */
   if (rc!= NO_ERROR) {
      printf ("DosCreateQueue error: return code = %u\n", rc);
      return 1;
   }

   DataBuffer = "Start of the data... Middle of data...  Data ends.";
   rc = DosWriteQueue (hqAnyQueue,          /* Queue to write to           */
                       87654321L,           /* Request data                */
                       strlen(DataBuffer),  /* Length of data to write     */
                       DataBuffer,          /* Pointer to data             */
                       0L);              /* Priority (not applicable here) */
   if (rc!= NO_ERROR) {
      printf ("DosWriteQueue error: return code = %u\n", rc);
      return 1;
   }

   DataBuffer = "";                          /* Clear the DataBuffer        */
   rc = DosPeekQueue (hqAnyQueue,            /* Handle of queue             */
                      &Request,              /* Request data for element    */
                      &ulDataLen,            /* Length of data returned     */
                      (PVOID) &DataBuffer,   /* Data returned               */
                      &ulElemCode,           /* Input: 0 reads next element
                                                Output:  peeked element id  */
                      DCWW_WAIT,             /* Wait for data               */
                      &ElemPrty,             /* Priority of element         */
                      0L);                   /* Semaphore (not used here)   */
  if (rc != NO_ERROR) {
     printf ("DosPeekQueue error : return code = %u\n", rc);
     return 1;
  } else {
     printf ("DosPeekQueue returns: '%s'\n", DataBuffer);
     printf ("  (Request data = %u)\n", Request.ulData);
  }

  rc = DosCloseQueue(hqAnyQueue);         /* Close the queue */
  if (rc!= NO_ERROR) {
     printf ("DosCloseQueue error: return code = %u\n", rc);
     return 1;
  }

  return NO_ERROR;
}


[Back] [Next]