16.10 - Win32 Named Pipes API - Access Module

Teradata Tools and Utilities Access Module Reference

prodname
Access Module
vrm_release
16.10
created_date
July 2017
category
Programming Reference
featnum
B035-2425-077K

When creating a Win32 client application that writes to a named pipe, it is necessary to know how the named pipes server creates the named pipe. This is important to be able to code the corresponding options on the client application's CreateFile() system call.

The Win32 Named Pipes Access Module creates the named pipe using the following system call:

CreateNamedPipe(PipeName, // Pipe name
                     PIPE_ACCESS_INBOUND, // Open mode
                     PIPE_TYPE_BYTE,      // pipe mode
                     4,            // Number of instances
                     BuffSize,     // output buffer size
                     BuffSize,     // input buffer size
                     100,// default timeout in milliseconds
                     NULL); // pointer to security attributes
where the following is true:
  • PipeName is any string of the form \\.\pipe\pipename.
  • pipename is the pipe name agreed upon between the client and server applications.
  • BuffSize is a value that is twice the number of bytes specified in the initialization string Block_size parameter.

A user-developed client application must code the GENERIC_WRITE (but not the GENERIC_READ) option on its CreateFile() system call because the access module allows data to flow only from client to server.

Example: Win32 Named Pipes API

HANDLE hPipe =
CreateFile(PipeName,// pipe name
  GENERIC_WRITE,// write access
  0,              // no sharing
  NULL,           // no security attributes
  OPEN_EXISTING,  // opens existing pipe
  0,              // default attributes
  NULL);          // no template file

Alternately, the client utility can use standard 'C' stream I/O, opening the pipe with the following:

FILE *fp = fopen(PipeName, "wb");

As a named pipes server, the access module both connects to the pipe and reads from the pipe using synchronous, blocking I/O. The client is free to write to the pipe either synchronously or asynchronously.

The access module does not impose a message structure on the data flowing through the pipe. Thus, the client application may write to the named pipe either as a stream of bytes or as a stream of messages since the access module always reads from the pipe as a stream of bytes.

For details on programming Win32 named pipes, see the article “Named Pipes” under Platform SDK in the Microsoft Developer Network Library Online.