March 10th 1997 Mirror Sites ![]() Download the Software Network Card Drivers ![]() Features User's Guide Help ![]() Search Distribution Rights Listserv Shareware Links ![]() Order the Software Help Us Promote NetSoft LAN Dealer Enquires Welcome Home Page | http://www.netsoft.ie/ CHAPTER 16 Developing Multi-User ApplicationsFile Sharing and Locking Tips for System ProgrammersThis section should only be read by system programmers. It explains the DOS file sharing modes in detail and the DOS function calls to implement file and record locking.Lock and unlock function callsThe DOS INTERRUPT 21H Function AH=5CH lock and unlock file access functions, denies or permits access to a specified region of a file. This call is available in DOS version's 3.1 or above. The DOS SHARE.EXE command must be loaded on the server machine.The interpretation of the error code is very important. Do not assume that if an error is returned (i.e. carry flag is set) the region or record is locked. You must interpret the actual error code returned, and take the appropriate action. On Entry Lock and Unlock Function Calls AH= 5Ch Lock/Unlock Function AL= 00h - Lock a region 01h - Unlock a region BX= File handle CX= Offset (high) of region DX= Offset (low) of region SI= Length (high) of region DI= Length (low) of region On Exit If carry set (cy=1) then AX= Error code If carry clear (cy=0) function was successful 01h Invalid function call. AL is not 00h or 01h, or SHARE.EXE is not loaded on file server 06h Invalid Handle 21h File locking violation (Specified region is already locked) 24h Sharing buffer overflow Increase the /L:Locks and /F:Space parameters on the SHARE.EXE command line LockingThis function is used to lock or unlock a region of a file, preventing or allowing access to that region by other processes in a multi-tasking or networking environment.The CX and DX registers together make up a 4-byte integer that specifies the byte offset into the file of the region to be locked or unlocked. The SI and DI registers make up a 4-byte integer specifying the length of the region. Terminating a process that has an open file with a locked region, or closing a file with a locked region, have undefined results. If your program can be aborted through DOS INTERRUPTS 23H or 24H, you should ensure that the locks are released before terminating the program. UnlockingThe unlocking operation must specify exactly the same file region as the locking operation. A child process (i.e. a process created through the DOS EXEC system call), does not inherit access to regions of a file that were locked by its parent.File sharing modesThe lock and unlock function calls should be used when a file is opened in any of the following modes:Deny read sharing mode Deny none sharing mode Deny write sharing mode, and file opened for read/write Deny write sharing mode, and file opened for write only Open file function callsDOS INTERRUPT 21H function 3DH opens a file with the specified access code.On Entry Open file function call AH= 3Dh Open file function AL= Open Mode (see below) DS= Segment of ASCIIZ string pathname DX= Offset of ASCIIZ string pathname On Exit If carry set (cy=1) then AX= Error code. If carry clear (cy=0) function was successful 01h Invalid function call 02h File not found 03h Path not found 04h No handle available. Check the FILES= parameter in CONFIG.SYS file. Load the NETFILES.COM program on the server machine to open more than 255 files 05h Access denied 0Ch Open mode invalid This function opens the file whose pathname is specified in the ASCIIZ string at DS:DX using the Open Mode byte to determine how the file may be accessed. The function opens any existing file, including hidden files, and sets the record size to 1 byte. Open modeThe open mode is made up of a combination of three sub modes. The structure of the sub modes is shown in the table below:7 6 5 4 3 2 1 0 Access Mode DOS 2.x A A A Access Mode Read/Write access R Reserved Always 0 S S S Sharing Mode Must be 0 for DOS 2.x I Inheritance Must be 0 Bit for DOS 2.x Access modeThe low-order three bits of the access mode are used in the same manner in DOS version 2 and 3. These bits indicate allowable access (read, write, or read/write).2 1 0 Hex Access Mode 0 0 0 00h Read only 0 0 1 01h Write only 0 1 1 02h Read/Write Reserved Bit 3 is reserved (must always be zero). 3 Hex Reserved R 00h Must be 0 Sharing mode In DOS 3.0 and above, bits 4, 5 and 6 specify a sharing mode (must be set to 0 in DOS 2.x). These bits govern the manner (if any) in which other users on a network or multi-tasking environment may open and use the file, after you have opened it. The following settings (and no others) are valid: 6 5 4 Hex Sharing Mode 0 0 0 00h Compatibility mode 0 0 1 10h Deny read/write (exclusive mode) 0 1 0 20h Deny write mode 0 1 1 30h Deny read mode 1 0 0 40h Deny none mode The inheritance flag The inheritance flag (bit 7), specifies whether child processes will inherit the use of this file. If bit 7 is 0, child processes automatically have access to the file. If bit 7 is 1, the file is not automatically available to child processes. Like any other process, however, a child process can request access to the file on a shared basis. 7 Hex Inheritance Flag Bit 0 00h File is inherited by child processes 1 80h File is not inherited Opening filesOnce a file has been opened by a process, the availability of that file to other processes is determined by both the sharing mode, and access mode of the original process, as well as by the sharing mode and access mode specified by the subsequent process. Here is a case-by-case summary of these interactions:The file is first opened in compatibility sharing mode. A file is considered to be in compatibility mode if it is opened using any of the following: 1. An FCB function. 2. Any of the CREATE functions. 3. Any handle function call in which compatibility mode is specified. A file opened in compatibility mode may be re-opened any number of times by a single process, unless the file is already open under one of the other four sharing modes. If the file has the read-only attribute, however, and is currently open in deny-write sharing mode with read-access, it may be opened in compatibility mode with read-access. The file is opened in one of the other sharing modes. A file first opened in Mode May be re-opened Mode in Deny read/write mode, x0010000 May not be read only re-opened Deny read/write mode, x0010001 May not be write only re-opened Deny read/write mode, x0010010 May not be read/write re-opened Deny write mode, read x0100000 Deny write, read x0100000 only only x1000000 Deny none, read only Deny write mode, write x0100001 Deny read, read x0110000 only only x1000000 Deny none, read only Deny write mode, x0100010 Deny none, read x1000000 read/write only Deny read mode, read x0110000 Deny write, x0100001 only write only x1000001 Deny none, write only Deny read mode, write x0110001 Deny read, write x0110001 only only x1000001 Deny none, write only Deny read mode, x0110010 Deny none, write x1000001 read/write only Deny none mode, read x1000000 Deny write, read x0100000 only only x0100001 Deny write, x0100010 write only x1000000 Deny write, x1000001 read/write x1000010 Deny none, read only Deny none, write only Deny none, read/write Deny none mode, write x1000001 Deny read, read x0110000 only only x0110001 Deny read, write x0110010 only x1000000 Deny read, x1000001 read/write x1000010 Deny none, read only Deny none, write only Deny none, read/write Deny none mode, x1000010 Deny none, read x1000000 read/write only x1000001 Deny none, write x1000010 only Deny none, read/write Additional tipsFiles that end with a colon (devices) are not opened with this function call. To open devices, you must not specify the colon, e.g. to open LPT: use LPT instead. The DOS SHARE.EXE program must be loaded on the server for sharing and file and record locking. Child processes which inherit files, also inherit their sharing and access restrictions. The CONFIG.SYS FILES= parameter must specify the number of files you are going to open simultaneously. Remember, unless you explicitly close the PRN, CON, and AUX devices, they remain open and thus use a file handle. The DOS-NET NETFILES.COM program must be loaded on the server machine if you wish to open more than 255 files on a server. In addition, you must set the DOSNET.INI file parameter NetFiles= to the number of files above 255 that you wish to open. With some software, it is necessary to load SHARE.EXE on the client machine, as well as the server. [Table of Contents] [Home Page] | |
![]() | ![]() | ![]() |