en:docs:fapi:dosduphandle

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

en:docs:fapi:dosduphandle [2018/08/26 16:39]
prokushev created
en:docs:fapi:dosduphandle [2018/09/02 06:59] (current)
prokushev
Line 5: Line 5:
  
 ==Syntax== ==Syntax==
- ​DosDupHandle (OldFileHandle,​ NewFileHandle)+ 
 +  ​DosDupHandle (OldFileHandle,​ NewFileHandle)
  
 ==Parameters== ==Parameters==
-;OldFileHandle (HFILE) - input : Current file handle. + 
-;NewFileHandle (PHFILE) - input/​output : Address of a Word. On input, values and their meanings are: +  *OldFileHandle (HFILE) - input : Current file handle. 
-:FFFFH - Allocate a new file handle and return it here. +  *NewFileHandle (PHFILE) - input/​output : Address of a Word. On input, values and their meanings are: 
-:<>​FFFFH - Assign this value as the new file handle. A valid value is any of the handles assigned to standard I/O, or the handle of a file currently opened by the process. +    *FFFFH - Allocate a new file handle and return it here. 
-:On output, a value of FFFFH returns a value for NewFileHandle,​ allocated by OS/2.+    *<>​FFFFH - Assign this value as the new file handle. A valid value is any of the handles assigned to standard I/O, or the handle of a file currently opened by the process. 
 +  *On output, a value of FFFFH returns a value for NewFileHandle,​ allocated by OS/2.
  
 ==Return Code== ==Return Code==
- rc (USHORT) - return+ 
 +  rc (USHORT) - return 
 +  ​
 Return code descriptions are: Return code descriptions are:
-* 0        NO_ERROR  + 
-* 4        ERROR_TOO_MANY_OPEN_FILES  +  ​* 0        NO_ERROR  
-* 6        ERROR_INVALID_HANDLE  +  * 4        ERROR_TOO_MANY_OPEN_FILES  
-* 114      ERROR_INVALID_TARGET_HANDLE+  * 6        ERROR_INVALID_HANDLE  
 +  * 114      ERROR_INVALID_TARGET_HANDLE
  
 ==Remarks== ==Remarks==
 +
 Duplicating the handle duplicates and ties all handle-specific information between OldFileHandle and NewFileHandle. For example, if you move the read/write pointer of either handle by a DosRead, DosWrite, or DosChgFilePtr function call, the pointer for the other handle is also changed. Duplicating the handle duplicates and ties all handle-specific information between OldFileHandle and NewFileHandle. For example, if you move the read/write pointer of either handle by a DosRead, DosWrite, or DosChgFilePtr function call, the pointer for the other handle is also changed.
  
 The valid values for NewFileHandle include the following handles for standard I/O, which are always available to the process: The valid values for NewFileHandle include the following handles for standard I/O, which are always available to the process:
-:0000H      Standard input  + 
-:0001H      Standard output  +  *0000H      Standard input  
-:0002H      Standard error. ​+  *0001H      Standard output  
 +  *0002H      Standard error. ​
  
 If a file handle value of a currently open file is specified in NewFileHandle,​ the file handle is closed before it is redefined as the duplicate of OldFileHandle. Avoid using arbitrary values for NewFileHandle. If a file handle value of a currently open file is specified in NewFileHandle,​ the file handle is closed before it is redefined as the duplicate of OldFileHandle. Avoid using arbitrary values for NewFileHandle.
Line 36: Line 43:
 ==Example Code== ==Example Code==
 ===C Binding=== ===C Binding===
-<PRE> 
-#define INCL_DOSFILEMGR 
  
-USHORT ​ rc = DosDupHandle(OldFileHandle,​ NewFileHandle);​+  #define INCL_DOSFILEMGR 
 +   
 +  ​USHORT ​ rc = DosDupHandle(OldFileHandle,​ NewFileHandle);​ 
 +   
 +  HFILE            OldFileHandle;​ /* Existing file handle */ 
 +  PHFILE ​          ​NewFileHandle;​ /* New file handle (returned) */ 
 +   
 +  USHORT ​          ​rc; ​           /* return code */
  
-HFILE            OldFileHandle;​ /* Existing file handle */ 
-PHFILE ​          ​NewFileHandle;​ /* New file handle (returned) */ 
- 
-USHORT ​          ​rc; ​           /* return code */ 
-</​PRE>​ 
 This example opens a file, creates a second file handle, then closes the file with the second handle. ​ This example opens a file, creates a second file handle, then closes the file with the second handle. ​
  
-<​PRE>​ +  ​#define INCL_DOSFILEMGR 
-#define INCL_DOSFILEMGR +   
- +  #define OPEN_FILE 0x01 
-#define OPEN_FILE 0x01 +  #define CREATE_FILE 0x10 
-#define CREATE_FILE 0x10 +  #define FILE_ARCHIVE 0x20 
-#define FILE_ARCHIVE 0x20 +  #define FILE_EXISTS OPEN_FILE 
-#define FILE_EXISTS OPEN_FILE +  #define FILE_NOEXISTS CREATE_FILE 
-#define FILE_NOEXISTS CREATE_FILE +  #define DASD_FLAG 0 
-#define DASD_FLAG 0 +  #define INHERIT 0x80 
-#define INHERIT 0x80 +  #define WRITE_THRU 0 
-#define WRITE_THRU 0 +  #define FAIL_FLAG 0 
-#define FAIL_FLAG 0 +  #define SHARE_FLAG 0x10 
-#define SHARE_FLAG 0x10 +  #define ACCESS_FLAG 0x02 
-#define ACCESS_FLAG 0x02 +   
- +  #define FILE_NAME "​test.dat"​ 
-#define FILE_NAME "​test.dat"​ +  #define FILE_SIZE 800L 
-#define FILE_SIZE 800L +  #define FILE_ATTRIBUTE FILE_ARCHIVE 
-#define FILE_ATTRIBUTE FILE_ARCHIVE +  #define RESERVED 0L 
-#define RESERVED 0L +   
- +  HFILE   ​FileHandle;​ 
-HFILE   ​FileHandle;​ +  HFILE   ​NewHandle 
-HFILE   ​NewHandle +  USHORT ​ Wrote; 
-USHORT ​ Wrote; +  USHORT ​ Action; 
-USHORT ​ Action; +  PSZ     ​FileData[100];​ 
-PSZ     ​FileData[100];​ +  USHORT ​ rc; 
-USHORT ​ rc; +  
    ​Action = 2;    ​Action = 2;
    ​strcpy(FileData,​ "​Data..."​);​    ​strcpy(FileData,​ "​Data..."​);​
Line 90: Line 96:
       rc = DosDupHandle(FileHandle, ​     /* Existing file handle */       rc = DosDupHandle(FileHandle, ​     /* Existing file handle */
                         &​NewHandle); ​    /* New file handle */                         &​NewHandle); ​    /* New file handle */
-</​PRE>​ 
  
 ===MASM Binding=== ===MASM Binding===
-<PRE> 
-EXTRN  DosDupHandle:​FAR 
-INCL_DOSFILEMGR ​    EQU 1 
- 
-PUSH   ​WORD ​   OldFileHandle ;Existing file handle 
-PUSH@  WORD    NewFileHandle ;New file handle (returned) 
-CALL   ​DosDupHandle 
  
 +  EXTRN  DosDupHandle:​FAR
 +  INCL_DOSFILEMGR ​    EQU 1
 +  ​
 +  PUSH   ​WORD ​   OldFileHandle ;Existing file handle
 +  PUSH@  WORD    NewFileHandle ;New file handle (returned)
 +  CALL   ​DosDupHandle
 +  ​
 Returns WORD Returns WORD
-</​PRE>​ 
- 
  
 ====== Note ====== ====== Note ======

en/docs/fapi/dosduphandle.txt · Last modified: 2018/09/02 06:59 by prokushev