Table of Contents
Note: This API call is for DOS and Win16 personality only. Use Family API for portability.
Int 21H, AH=3DH
Version
2 and higher
Brief
“OPEN” - OPEN EXISTING FILE
Family API
Input
AH = 3Dh
AL = access and sharing modes (see #01402)
DS:DX -> ASCIZ filename
CL = attribute mask of files to look for (server call only)
Return
CF clear if successful
AX = file handle
CF set on error
AX = error code (01h,02h,03h,04h,05h,0Ch,56h) (see #01680 at AH=59h)
Notes
file pointer is set to start of file
if SHARE or a network is loaded, the file open may fail if the file is already open, depending on the combination of sharing modes (see #01403,#01404)
file handles which are inherited from a parent also inherit sharing and access restrictions
files may be opened even if given the hidden or system attributes
under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
DR DOS checks the system password or explicitly supplied password at
the end of the filename (following a semicolon) against the reserved
field in the directory entry before allowing access
sharing modes are only effective on local drives if SHARE is loaded
Novell DOS 7 SHARE v1.00 would refuse file access in the cases in #01403 marked with [1] (read-only open of a read-only file which had previously been opened in compatibility mode); this was fixed in SHARE v1.01 of 09/29/94
Bitfields for access and sharing modes:
| Bit(s) | Description |
|---|---|
| 2-0 | access mode |
| 000 read only | |
| 001 write only | |
| 010 read/write | |
| 011 (DOS 5+ internal) passed to redirector on EXEC to allow case-sensitive filenames | |
| 3 | reserved (0) |
| 6-4 | sharing mode (DOS 3.0+) (see #01403) |
| 000 compatibility mode | |
| 001 “DENYALL” prohibit both read and write access by others | |
| 010 “DENYWRITE” prohibit write access by others | |
| 011 “DENYREAD” prohibit read access by others | |
| 100 “DENYNONE” allow full access by others | |
| 111 network FCB (only available during server call) | |
| 7 | inheritance |
| if set, file is private to current process and will not be inherited by child processes |
(Table 01403) Values of DOS 2-6.22 file sharing behavior:
| First Open | Second and subsequent Opens | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Compat | Deny All | Deny Write | Deny Read | Deny None | ||||||||||||
| R | W | RW | R | W | RW | R | W | RW | R | W | RW | R | W | RW | ||
| Compat | R | Y | Y | Y | N | N | N | 1 | N | N | N | N | N | 1 | N | N |
| W | Y | Y | Y | N | N | N | N | N | N | N | N | N | N | N | N | |
| RW | Y | Y | Y | N | N | N | N | N | N | N | N | N | N | N | N | |
| Deny All | R | C | C | C | N | N | N | N | N | N | N | N | N | N | N | N |
| W | C | C | C | N | N | N | N | N | N | N | N | N | N | N | N | |
| RW | C | C | C | N | N | N | N | N | N | N | N | N | N | N | N | |
| Deny Write | R | 2 | C | C | N | N | N | Y | N | N | N | N | N | Y | N | N |
| W | C | C | C | N | N | N | N | N | N | Y | N | N | Y | N | N | |
| RW | C | C | C | N | N | N | N | N | N | N | N | N | Y | N | N | |
| Deny Read | R | C | C | C | N | N | N | N | Y | N | N | N | N | N | Y | N |
| W | C | C | C | N | N | N | N | N | N | N | Y | N | N | Y | N | |
| RW | C | C | C | N | N | N | N | N | N | N | N | N | N | Y | N | |
| Deny None | R | 2 | C | C | N | N | N | Y | Y | Y | N | N | N | Y | Y | Y |
| W | C | C | C | N | N | N | N | N | N | Y | Y | Y | Y | Y | Y | |
| RW | C | C | C | N | N | N | N | N | N | N | N | N | Y | Y | Y | |
Legend: Y = open succeeds, N = open fails with error code 05h C = open fails, INT 24 generated 1 = open succeeds if file read-only, else fails with error code 2 = open succeeds if file read-only, else fails with INT 24
Values for DOS 7.x file sharing behavior:
| First Open | Second and subsequent Opens | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Compat | Deny All | Deny Write | Deny Read | Deny None | |||||||||||||||||
| R | W | RW | A | R | W | RW | A | R | W | RW | A | R | W | RW | A | R | W | RW | A | ||
| Compat | R | Y | Y | Y | Y | N | N | N | N | Y | N | N | Y | N | N | N | Y | Y | N | N | Y |
| W | Y | Y | Y | C | N | N | N | N | N | N | N | N | N | N | N | Y | Y | N | N | Y | |
| RW | Y | Y | Y | C | N | N | N | N | N | N | N | N | N | N | N | Y | Y | N | N | Y | |
| NA | Y | C | C | Y | N | N | N | N | Y | N | N | Y | N | N | N | Y | Y | N | N | Y | |
| Deny All | R | C | C | C | C | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N |
| W | C | C | C | C | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | |
| RW | C | C | C | C | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | |
| NA | C | C | C | C | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | |
| Deny Write | R | Y | C | C | Y | N | N | N | N | Y | N | N | Y | N | N | N | Y | Y | N | N | Y |
| W | C | C | C | C | N | N | N | N | N | N | N | N | Y | N | N | Y | Y | N | N | Y | |
| RW | C | C | C | C | N | N | N | N | N | N | N | N | N | N | N | Y | Y | N | N | Y | |
| NA | Y | C | C | Y | N | N | N | N | Y | N | N | Y | N | N | N | Y | Y | N | N | Y | |
| Deny Read | R | C | C | C | C | N | N | N | N | N | Y | N | N | N | N | N | N | N | Y | N | N |
| W | C | C | C | C | N | N | N | N | N | N | N | N | N | Y | N | N | N | Y | N | N | |
| RW | C | C | C | C | N | N | N | N | N | N | N | N | N | N | N | N | N | Y | N | N | |
| NA | Y | Y | Y | Y | N | N | N | N | Y | Y | Y | Y | N | N | N | Y | Y | Y | Y | Y | |
| Deny None | R | Y | Y | Y | Y | N | N | N | N | Y | Y | Y | Y | N | N | N | Y | Y | Y | Y | Y |
| W | C | C | C | C | N | N | N | N | N | N | N | N | Y | Y | Y | Y | Y | Y | Y | Y | |
| RW | C | C | C | C | N | N | N | N | N | N | N | N | N | N | N | Y | Y | Y | Y | Y | |
| NA | Y | Y | Y | Y | N | N | N | N | Y | Y | Y | Y | N | N | N | Y | Y | Y | Y | Y | |
Legend: R → reading, W → writing, RW → both reading & writing,
A/NA -> reading without access time update
Y = open succeeds, N = open fails with error code 05h
C = open fails, INT 24 generated
See also
AH=0Fh,AH=3Ch],AX=[[en:docs:dos:api:int21:43:01|4301h,AX=5D00h,INT 2F/AX=1116h,INT 2F/AX=1226h
Note
Text based on Ralf Brown Interrupt List Release 61
| osFree Macro Library | |
|---|---|
| Video I/O | @SetMode @SetCurSz @SetCurPos @GetCur @SetPage @ScrollUp @ScrollDn @Scroll @GetChAtr @PutChAtr @PutCh @SetPalet @SetColor @SetDot @GetDot @WrtTTY @VideoState @GetMode @GetDisplay @GetVideoState @GetEGAInfo @Cls |
| Hardware info | @Equipment @MemSize |
| Serial I/O | @AuxInit @AuxSendChar @AuxRecieveChar @AuxStatus |
| Tape I/O | @TapeOn @TapeOff @TapeRead @TapeWrite |
| Keyboard I/O | @KbdStatus @CharIn @CharPeek |
| Printer I/O | @PrnPrint @PrnInit @PrnStatus |
| Disk I/O | @DskReset @DskStatus @DskRead @DskWrite @DskVerify @DskFormat |
| Date and Time | @SetTime @GetTime |
| Mouse | @MouInit @MouShowPointer @MouStatus @MouSetPos @MouSetMickey @MouRegion |
| Memory manager | @ModBlok SET_BLOCK |





