1. Re: file/data sharing
- Posted by Irv <irv at ELLIJAY.COM> Jun 07, 1998
- 586 views
At 03:51 PM 6/7/98 -0500, Terry Constantwrote: >Irv, >I am new to Euphoria. But if it continues to prove out as it has been, I >intend to use on a networked system of a client in which I will be using >it with shared data. So, I am interested. >-- >Terry Constant >-- Well, here's what we need to get started: From the shareware version of ** Programmer's Technical Reference for MSDOS and the IBM PC ** by Dave Williams Function 6Ch Extended Open/Create DOS 4.0+ (US) Combines functions available with Open, Create, CreateNew, and Commit File entry AH 6Ch AL 00h reserved [which means there might be other subfunctions?] BX mode format 0WF0 0000 ISSS 0AAA AAA is access code (read, write, read/write) SSS is sharing mode I 0 pass handle to child 1 no inherit [interesting!] F 0 use int 24h for errors 1 disable int 24h for all I/O on this handle; use own error routine W 0 no commit 1 auto commit on all writes CX create attribute bits 0 read only 1 hidden 2 system 3 volume label 4 reserved 5 archive 6-15 reserved DH 00h (reserved) DL action if file exists/does not exists bits 0-3 action if file exists 0000 fail 0001 open 0010 replace/open 4-7 action if file does not exist 0000 fail 0001 create DS:SI pointer to ASCIIZ file name return CF set on error AX error code (unknown) clear AX file handle CX action taken 01h file opened 02h file created/opened 03h file replaced/opened note When APPEND is installed, if DX=xx1x it looks only in current directory, if DX=xx0x it will search the full append path. DX is called the open flag and gives what action to take if the file exists or does not exist. Function 5Ch Lock/Unlock File Access (DOS 3.0+) entry AH 5Ch AL 00h to lock file region 01h to unlock file region BX file handle CX:DX 4-byte starting offset from beginning of file of region to lock SI:DI 4-byte integer, high/low size of region to lock (in bytes) return CF clear successful set AX error code (01h, 06h, 21h, 24h) note 1) Unlock all files before exiting or undefined results may occur. Programs using file locking should trap int 23h (Control-C Handler Address) and int 24h (Critical Error Handler Address) and unlock files before returning to the caller. 2) Programs spawned with EXEC inherit all the parent's file handles but not the file locks. 3) This call is explicitly supported in the OS/2 1.x DOS Compatibility Box. 4) You may lock an entire file, any part of a file, or several parts of the same file. For example, it would be more efficient to lock an area in a database containing a single record than to lock the entire file. If two adjacent sections of a file are locked separately, they must be unlocked separately - you cannot change the lock pointers and use a single unlock call. 5) You should lock only as much of a file as you need and keep the lock only for as long as necessary. Should a file need to be shared and updated often, continual locking and unlocking can slow file access detectably. 6) This call returns error 01h if SHARE is not loaded. 7) Locked files must be unlocked before the program terminates, or the result is undefined. 8) A transaction-oriented algorithm for using locking is recommended. In effect, assert lock, read data, change data, remove lock. An application should release its lock when a transaction is complete. 9) Locking past end-of-file does not cause an error. 10) Locking a portion of a file with fn 5Ch denies all other processes both read and write access to the locked region. 11) For PC-MOS/386 native mode, use ECX and EDX instead of CX:DX. Irv