FS_OPENCREATE - Open a file
Purpose
Opens (or creates) the specified file.
Calling Sequence
int far pascal FS_OPENCREATE(pcdfsi, pcdfsd, pName, iCurDirEnd, psffsi,
psffsd, ulOpenMode, usOpenFlag, pusAction,
usAttr, pcEABuf, pfgenflag)
struct cdfsi far * pcdfsi;
struct cdfsd far * pcdfsd;
char far * pName;
unsigned short iCurDirEnd;
struct sffsi far * psffsi;
struct sffsd far * psffsd;
unsigned long ulOpenMode;
unsigned short usOpenFlag;
unsigned short far * pusAction;
unsigned short usAttr;
char far * pcEABuf;
unsigned short far * pfgenflag;
Where
pcdfsi is a pointer to the file-system-independent working directory
structure.
The contents of this structure are invalid for direct access opens.
pcdfsd is a pointer to the file-system-dependent working directory
structure . The contents of this structure are invalid for direct access
opens. For remote character devices, this field contains a pointer to a
DWORD that was obtained from the remote FSD when the remote device was
attached to this FSD. The FSD can use this DWORD to identify the remote
device.
pName is a pointer to the ASCIIZ name of the file to be opened.
The FSD does not need to verify this pointer.
iCurDirEnd is the index of the end of the current directory in pName.
This is used to optimize FSD path processing. If iCurDirEnd == -1, there
is no current directory relevant to the name text, that is a device. This
value is invalid for direct access opens.
psffsi is a pointer to the file-system-independent portion of an open file
instance.
psffsd is a pointer to the file-system-dependent portion of an open file
instance.
ulOpenMode indicates the desired sharing mode and access mode for the file
handle.
See OS/2 Version 2.0 Control Program Programming Reference for a
description of the OpenMode parameter for DosOpen.
An additional access mode 3 is defined when the file is being opened on
behalf of OS/2, loaded for purposes of executing a file or loading a
module. If the file system does not support an executable attribute, it
should treat this access mode as open for reading. The value of ulOpenMode
passed to the FSD will be valid.
usOpenFlag indicates the action taken when the file is present or absent.
See OS/2 Version 2.0 Control Program Programming Reference for a
description of the usOpenFlag parameter for DosOpen.
The value of openflag passed to the FSD is valid. This value is invalid
for direct access opens.
pusAction is the location where the FSD returns a description of the
action taken as governed by openflag.
The FSD does not need to verify this pointer. The contents of Action are
invalid on return for direct access opens.
usAttr are the OS/2 file attributes.
This value is invalid for direct access opens.
pcEABuf is a pointer to the extended attribute buffer.
This buffer contains attributes that will be set upon creation of a new
file or upon replacement of an existing file. If NULL, no extended
attributes are to be set. Addressing of this data area has not been
validated by the OS/2 kernel (see FSH_PROBEBUF). The contents of EABuf are
invalid on return for direct access opens.
pfgenflag is a pointer to an unsigned short of flags returned by the FSD.
The only flag currently defined is 0x0001 fGenNeedEA, which indicates that
there are critical EAs associated with the file. The FSD does not need to
verify this pointer.
Remarks
For the file create operation, if successful, ST_CREAT and ST_PCREAT are
set . This causes the file to have zero as last read and last write time.
If the last read/write time stamps are to be the same as the create time,
simply set ST_ SWRITE, ST_PWRITE, ST_SREAD, and ST_PREAD as well.
For the file open operation, the FSD copies all supported time stamps from
the directory entry into the SFT.
Note: ALSO NEW FOR 2.0, it is suggested that the FSD copy the DOS file
attributes from the directory entry into the SFT. This allows the FSD and
the OS2 kernel to handle FCB opens more efficiently.
The sharing mode may be zero if this is a request to open a file from the
DOS mode or for an FCB request.
FCB requests for read-write access to a read-only file are mapped to read-
only access and reflected in the sfi_mode field by the FSD. An FCB
request is indicated by the third bit set in the sfi_type field.
The flags defined for the sfi_type field are:
otype == 0x0000 indicates file.
otype == 0x0001 indicates device.
otype == 0x0002 indicates named pipe.
otype == 0x0004 indicates FCB open.
oAll other values are reserved.
FSDs are required to initialize the sfi_type field, preserving the FCB bit
.
On entry, the sfi_hvpb field is filled in. If the file's logical size
(EOD) is specified, it is passed in the sfi_size field. To the extent
possible, the file system tries to allocate this much storage for
efficient access.
Extended attributes are set for:
othe creation ofa new file
othe truncation of an existing file
othe replacement of an existing file.
They are not set for a normal open.
If the standard OS/2 file creation attributes are specified, they are
passed in the attr field. To the extent possible, the file system
interprets the extended attributes and applies them to the newly-created
or existing file. Extended attributes (EAs) that the file system does not
itself use are retained with the file and not discarded or rejected.
When replacing an existing file, the FSD should not change the case of the
existing file.
FSDs are required to support direct access opens. These are indicated by a
bit set in the sffsi.sfi_mode field. See OS/2 Version 2.0 Control Program
Programming Reference for more information on DosOpen. Some of the
parameters passed to the FSD for direct access opens are invalid, as
described above.
On a successful return, the following fields in the sffsi structure must
be filled in by the file system driver: sfi_size and all the time and date
fields .
The file-system-dependent portion of an open file instance passed to the
FSD for FS_OPENCREATE is never initialized.
Infinite FCB opens of the same file by the same DOS mode process is
supported . The first open is passed through to the FSD. Subsequent opens
are not seen by the FSD.
Any non-zero value returned by the FSD indicates that the open failed and
the file is not open.
Note: This entry point's parameter list definition has changed from the
1.x IFS document. The OpenMode parameter has been widened from a unsigned
short to a unsigned long. The upper word of the long is relevant only to a
special SPOOLER FSD. For information about the upper word please contact
the OS/2 Techinal Interface group for the OEMI document for the 2.0 API
Created using Inf-PHP v.2 (c) 2003 Yuri Prokushev
Created using Inf-HTML v.0.9b (c) 1995 Peter Childs