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 |