Difference between revisions of "DosMakePipe"

From EDM2
Jump to: navigation, search
m
Line 1: Line 1:
{{Legacy
 
|RepFunc=
 
|Remarks=This page list the older version of the function for reference.
 
}}
 
 
This call creates a pipe.
 
This call creates a pipe.
  
 
==Syntax==
 
==Syntax==
  DosMakePipe (ReadHandle, WriteHandle, PipeSize)  
+
  DosMakePipe (ReadHandle, WriteHandle, PipeSize)
  
 
==Parameters==
 
==Parameters==
;ReadHandle (PHFILE) - output : Address of the read handle of the pipe.  
+
;ReadHandle (PHFILE) - output: Address of the read handle of the pipe.
;WriteHandle (PHFILE) - output : Address of the write 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.
+
;PipeSize (USHORT) - input: Storage size, in bytes, to reserve for the pipe.
  
 
==Return Code==
 
==Return Code==
rc (USHORT) - return
+
;rc (USHORT) - return:Return code descriptions are:
Return code descriptions are:
+
* 0 NO_ERROR
* 0       NO_ERROR  
+
* 4 ERROR_TOO_MANY_OPEN_FILES
* 4       ERROR_TOO_MANY_OPEN_FILES  
+
* 8 ERROR_NOT_ENOUGH_MEMORY
* 8       ERROR_NOT_ENOUGH_MEMORY  
+
*109 ERROR_BROKEN_PIPE
* 109     ERROR_BROKEN_PIPE
+
  
 
==Remarks==
 
==Remarks==
Line 28: Line 23:
 
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.
 
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.
  
==Example Code==
+
==Bindings==
===C Binding===
+
===C ===
 
<PRE>
 
<PRE>
 
#define INCL_DOSQUEUES
 
#define INCL_DOSQUEUES
Line 35: Line 30:
 
USHORT  rc = DosMakePipe(ReadHandle, WriteHandle, PipeSize);
 
USHORT  rc = DosMakePipe(ReadHandle, WriteHandle, PipeSize);
  
PHFILE           ReadHandle;    /* Address to put read handle (returned) */
+
PHFILE ReadHandle;    /* Address to put read handle (returned) */
PHFILE           WriteHandle;  /* Address to put write handle (returned) */
+
PHFILE WriteHandle;  /* Address to put write handle (returned) */
USHORT           PipeSize;      /* Size to reserve for the pipe */
+
USHORT PipeSize;      /* Size to reserve for the pipe */
  
USHORT           rc;            /* return code */
+
USHORT rc;            /* return code */
 
</PRE>
 
</PRE>
  

Revision as of 13:17, 25 May 2018

This call creates a pipe.

Syntax

DosMakePipe (ReadHandle, WriteHandle, PipeSize)

Parameters

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.

Return Code

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

Remarks

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.

Bindings

C

#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 */

MASM Binding

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