This call creates a pipe.
DosMakePipe (ReadHandle, WriteHandle, PipeSize)
- ReadHandle (PHFILE) - output
- Address of the read handle of the pipe.
- WriteHandle (PHFILE) - output
- Address of the write handle of the pipe.
- PipeSize (USHORT) - input
- Storage size, in bytes, to reserve for the pipe.
- rc (USHORT) - return
- Return code descriptions are:
- 0 NO_ERROR
- 4 ERROR_TOO_MANY_OPEN_FILES
- 8 ERROR_NOT_ENOUGH_MEMORY
- 109 ERROR_BROKEN_PIPE
Pipes are mechanisms used within a closely related group of processes. There are no control, permission mechanisms, or checks performed on operations to pipes.
When there is insufficient space in a pipe for the data being written, a requesting thread blocks until enough data is removed to allow the write request to be satisfied. If the PipeSize parameter is 0, then the pipe is created with a default size of 512 bytes.
When all users close the handles, a pipe is deleted. If two processes are communicating by a pipe and the process reading the pipe ends, the next write gets the "ERROR_BROKEN_PIPE" error code.
#define INCL_DOSQUEUES USHORT rc = DosMakePipe(ReadHandle, WriteHandle, PipeSize); PHFILE ReadHandle; /* Address to put read handle (returned) */ PHFILE WriteHandle; /* Address to put write handle (returned) */ USHORT PipeSize; /* Size to reserve for the pipe */ USHORT rc; /* return code */
EXTRN DosMakePipe:FAR INCL_DOSQUEUES EQU 1 PUSH@ WORD ReadHandle ;Read handle (returned) PUSH@ WORD WriteHandle ;Write handle (returned) PUSH WORD PipeSize ;Size to reserve for the pipe CALL DosMakePipe Returns WORD