{{page>en:templates:fapiint}}
====== DosClose ======
This call closes a handle to a file, pipe, or device.
===== Syntax =====
DosClose (FileHandle)
===== Parameters =====
* FileHandle ([[HFILE]]) - input : Handle returned by a previous [[DosOpen]], [[DosMakeNmPipe]], or [[DosMakePipe]] call.
===== Return Code =====
rc ([[USHORT]]) - return
Return code descriptions are:
* 0 NO_ERROR
* 2 ERROR_FILE_NOT_FOUND
* 5 ERROR_ACCESS_DENIED
* 6 ERROR_INVALID_HANDLE
===== Remarks =====
Issuing DosClose with the handle to a file closes a handle to a file, pipe, or device.
If one or more additional handles to a file have been created with [[DosDupHandle]], the directory is not updated and all internal buffers are not written to the medium until DosClose has been issued for the duplicated handles.
Closing a handle to a device causes the device to be notified of the close, if appropriate.
==== Named Pipe Considerations ====
DosClose closes a named pipe by handle. When all handles referencing one end of a pipe are closed, the pipe is considered broken.
If the client end closes, no other process can re-open the pipe until the serving end issues a [[DosDisConnectNmPipe]] followed by a [[DosConnectNmPipe]].
If the server end closes when the pipe is already broken, it is deallocated immediately; otherwise, the pipe is not deallocated until the last client handle is closed.
===== Example Code =====
==== C Binding ====
#define INCL_DOSFILEMGR
USHORT rc = DosClose(FileHandle);
HFILE FileHandle; /* File handle */
USHORT rc; /* return code */
This example opens a file, then closes it.
#define INCL_DOSFILEMGR
#define OPEN_FILE 0x01
#define CREATE_FILE 0x10
#define FILE_ARCHIVE 0x20
#define FILE_EXISTS OPEN_FILE
#define FILE_NOEXISTS CREATE_FILE
#define DASD_FLAG 0
#define INHERIT 0x80
#define WRITE_THRU 0
#define FAIL_FLAG 0
#define SHARE_FLAG 0x10
#define ACCESS_FLAG 0x02
#define FILE_NAME "test.dat"
#define FILE_SIZE 800L
#define FILE_ATTRIBUTE FILE_ARCHIVE
#define RESERVED 0L
HFILE FileHandle;
USHORT Wrote;
USHORT Action;
PSZ FileData[100];
USHORT rc;
Action = 2;
strcpy(FileData, "Data...");
if(!DosOpen(FILE_NAME, /* File path name */
&FileHandle, /* File handle */
&Action, /* Action taken */
FILE_SIZE, /* File primary allocation */
FILE_ATTRIBUTE, /* File attribute */
FILE_EXISTS | FILE_NOEXISTS, /* Open function type */
DASD_FLAG | INHERIT | /* Open mode of the file */
WRITE_THRU | FAIL_FLAG |
SHARE_FLAG | ACCESS_FLAG,
RESERVED)) /* Reserved (must be zero) */
rc = DosClose(FileHandle); /* File Handle */
==== MASM Binding ====
EXTRN DosClose:FAR
INCL_DOSFILEMGR EQU 1
PUSH WORD FileHandle ;File handle
CALL DosClose
Returns WORD
===== Note =====
Text based on [[http://www.edm2.com/index.php/DosClose_(FAPI)]]
{{page>en:templates:fapi}}