DosProtectSetFilePtrL: Difference between revisions
Created page with "==Description== DosProtectSetFilePtrL moves the read or write pointer according to the type of move specified. ==Syntax== <PRE> #define INCL DOSFILEMGR #include os2.h ..." |
|||
| Line 138: | Line 138: | ||
</PRE> | </PRE> | ||
==Related Functions== | ==Related Functions== | ||
* [[OS2 API:CPI:DosProtectOpenL| | * [[OS2 API:CPI:DosProtectOpenL|DosProtectOpenL]] | ||
* [[OS2 API:CPI:DosProtectRead| | * [[OS2 API:CPI:DosProtectRead|DosProtectRead]] | ||
* [[OS2 API:CPI:DosProtectSetFileSizeL| | * [[OS2 API:CPI:DosProtectSetFileSizeL|DosProtectSetFileSizeL]] | ||
* [[OS2 API:CPI:DosProtectWrite| | * [[OS2 API:CPI:DosProtectWrite|DosProtectWrite]] | ||
[[Category:The OS/2 API Project]] | [[Category:The OS/2 API Project]] | ||
Revision as of 23:13, 21 June 2016
Description
DosProtectSetFilePtrL moves the read or write pointer according to the type of move specified.
Syntax
#define INCL DOSFILEMGR
#include os2.h
APIRET DosProtectSetFilePtrL
(HFILE hFile, LONGLONG ib, ULONG method, PLONGLONG ibActual, FHLOCK fhFileHandleLockID)
Parameters
- hFile HFILE) input
- The handle returned by a previous DosOpenL function.
- ib LONGLONG) input
- The signed distance (offset) to move, in bytes.
- method LONG) input
- The method of moving.
This field specifies the location in the file at which the read/write pointer starts before adding the ib offset. The values and their meanings are as shown in the following list
FILE_BEGIN Move the pointer from the beginning of the file. FILE_CURRENT Move the pointer from the current location of the read/write pointer. FILE_END Move the pointer from the end of the file. Use this method to determine a file s size.
- ibActual PLONGLONG) output
- Address of the new pointer location.
- fhFileHandleLockID FHLOCK) input
- The filehandle lockid returned by a previous DosProtectOpenL.
Return Code
ulrc APIRET) returns
DosProtectSetFilePtrL returns one of the following values
- NO_ERROR
- ERROR_INVALID_FUNCTION
- ERROR_INVALID_HANDLE
- 132 ERROR_SEEK_ON_DEVICE
- 131 ERROR_NEGATIVE_SEEK
- 130 ERROR_DIRECT_ACCESS_HANDLE
Remarks
The read/write pointer in a file is a signed 64-bit number. A negative value for ib moves the pointer backward in the file; a positive value moves it forward. DosProtectSetFilePtrL cannot be used to move to a negative position in the file.
DosProtectSetFilePtrL cannot be used for a character device or pipe.
Example Code
This example opens or creates and opens a file named DOSPROT.DAT , writes a string to it, returns the file pointer to the beginning of the file, reads it, and finally closes it using DosProtect functions.
#define INCL_DOSFILEMGR /* File Manager values */#define INCL_DOSERRORS /* DOS Error values */
#include os2.h
#include stdio.h
#include string.h
int main(VOID)
HFILE hfFileHandle = 0L;
ULONG ulAction = 0;
ULONG ulBytesRead = 0;
ULONG ulWrote = 0;
LONGLONG ullLocal = 0;
UCHAR uchFileName 20 = "dosprot.dat",
uchFileData 100 = " ";
FHLOCK FileHandleLock = 0; /* File handle lock */
APIRET rc = NO_ERROR; /* Return code */
/* Open the file test.dat. Make it read/write, open it */
/* if it already exists and create it if it is new. */
rc = DosProtectOpenL(uchFileName, /* File path name */
hfFileHandle, /* File handle */
ulAction, /* Action taken */
(LONGLONG)100, /* File primary allocation */
FILE_ARCHIVED | FILE_NORMAL, /* File attribute */
OPEN_ACTION_CREATE_IF_NEW |
OPEN_ACTION_OPEN_IF_EXISTS, /* Open function type */
OPEN_FLAGS_NOINHERIT |
OPEN_SHARE_DENYNONE |
OPEN_ACCESS_READWRITE, /* Open mode of the file */
0L, /* No extended attribute */
FileHandleLock); /* File handle lock id */
if (rc != NO_ERROR)
printf("DosProtectOpenL error return code = %u\n", rc);
return 1;
else
printf ("DosProtectOpenL Action taken = %u\n", ulAction);
/* endif */
/* Write a string to the file */
strcpy (uchFileData, "testing...\n3...\n2...\n1\n");
rc = DosProtectWrite (hfFileHandle, /* File handle */
(PVOID) uchFileData, /* String to be written */
sizeof (uchFileData), /* Size of string to be written */
ulWrote, /* Bytes actually written */
FileHandleLock); /* File handle lock id */if (rc != NO_ERROR)
printf("DosProtectWrite error return code = %u\n", rc);
return 1;
else
printf ("DosProtectWrite Bytes written = %u\n", ulWrote);
/* endif */
/* Move the file pointer back to the beginning of the file */
rc = DosProtectSetFilePtrL (hfFileHandle, /* File Handle */
(LONGLONG)0, /* Offset */
FILE_BEGIN, /* Move from BOF */
ullLocal, /* New location address */
FileHandleLock); /* File handle lock id */
if (rc != NO_ERROR)
printf("DosSetFilePtr error return code = %u\n", rc);
return 1;
/* Read the first 100 bytes of the file */
rc = DosProtectRead (hfFileHandle, /* File Handle */
uchFileData, /* String to be read */
100L, /* Length of string to be read */
ulBytesRead, /* Bytes actually read */
FileHandleLock); /* File handle lock id */
if (rc != NO_ERROR)
printf("DosProtectRead error return code = %u\n", rc);
return 1;
else
printf("DosProtectRead Bytes read = %u\n%s\n", ulBytesRead, uchFileData);
/* endif */
rc = DosProtectClose(hfFileHandle, FileHandleLock); /* Close the file */
if (rc != NO_ERROR)
printf("DosProtectClose error return code = %u\n", rc);
return 1;
return NO_ERROR;