DosSetFilePtrL: Difference between revisions
Appearance
mNo edit summary |
|||
| Line 10: | Line 10: | ||
(HFILE hFile, LONGLONG ib, ULONG method, PLONGLONG ibActual) | (HFILE hFile, LONGLONG ib, ULONG method, PLONGLONG ibActual) | ||
</PRE> | </PRE> | ||
==Parameters== | ==Parameters== | ||
; | ;hFile HFILE) input : The handle returned by a previous DosOpenL function. | ||
;ib LONGLONG) input : The signed distance (offset) to move, in bytes. | |||
; ib LONGLONG) input : The signed distance (offset) to move, in bytes. | ;method ULONG) input : The method of moving. | ||
:Specifies a location in the file from where the ib to move the read/write pointer starts. The values and their meanings are described in the following list: | |||
; method ULONG) input : The method of moving. | :*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. | |||
Specifies a location in the file from where the ib to move the read/write pointer starts. The values and their meanings are described in the following list | :*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. | |||
==Return Code== | ==Return Code== | ||
ulrc APIRET) returns | ulrc APIRET) returns | ||
DosSetFilePtrL returns one of the following values | DosSetFilePtrL returns one of the following values: | ||
* 0 NO_ERROR | |||
* 0 | * ERROR_INVALID_FUNCTION | ||
* | * ERROR_INVALID_HANDLE | ||
* | * 132 ERROR_SEEK_ON_DEVICE | ||
* 132 | * 131 ERROR_NEGATIVE_SEEK | ||
* 131 | * 130 ERROR_DIRECT_ACCESS_HANDLE | ||
* 130 | |||
==Remarks== | ==Remarks== | ||
| Line 47: | Line 38: | ||
==Example Code== | ==Example Code== | ||
This example opens or creates and opens a file named DOSTEST.DAT , writes to it, positions the file pointer back to the beginning of the file, reads from the file, and finally closes it. | This example opens or creates and opens a file named DOSTEST.DAT, writes to it, positions the file pointer back to the beginning of the file, reads from the file, and finally closes it. | ||
<PRE> | <PRE> | ||
#define INCL_DOSFILEMGR /* File Manager values */#define INCL_DOSERRORS /* DOS Error values */ | #define INCL_DOSFILEMGR /* File Manager values */ | ||
#include | #define INCL_DOSERRORS /* DOS Error values */ | ||
#include | #include <os2.h> | ||
#include | #include <stdio.h> | ||
#include <string.h> | |||
int main(void) | int main(void) | ||
HFILE hfFileHandle = 0L; /* Handle for file being manipulated */ | HFILE hfFileHandle = 0L; /* Handle for file being manipulated */ | ||
ULONG ulAction = 0; /* Action taken by DosOpenL */ | ULONG ulAction = 0; /* Action taken by DosOpenL */ | ||
| Line 115: | Line 107: | ||
ulBytesRead); /* Bytes actually read */ | ulBytesRead); /* Bytes actually read */ | ||
if (rc != NO_ERROR) | if (rc != NO_ERROR) | ||
printf("DosRead error return code = %u\n", rc); | printf("DosRead error return code = %u\n", rc); | ||
return 1; | return 1; | ||
| Line 127: | Line 119: | ||
printf("DosClose error return code = %u\n", rc); | printf("DosClose error return code = %u\n", rc); | ||
return 1; | return 1; | ||
return NO_ERROR; | return NO_ERROR; | ||
</PRE> | </PRE> | ||
==Related Functions== | ==Related Functions== | ||
* [[ | * [[DosOpenL]] | ||
* [[ | * [[DosRead]] | ||
* [[ | * [[DosSetFileSizeL]] | ||
* [[ | * [[DosWrite]] | ||
[[Category: | [[Category:Dos]] | ||
Revision as of 01:09, 17 November 2016
Description
DosSetFilePtrL moves the read write pointer according to the type of move specified.
Syntax
#define INCL DOSFILEMGR
#include os2.h
APIRET DosSetFilePtrL
(HFILE hFile, LONGLONG ib, ULONG method, PLONGLONG ibActual)
Parameters
- hFile HFILE) input
- The handle returned by a previous DosOpenL function.
- ib LONGLONG) input
- The signed distance (offset) to move, in bytes.
- method ULONG) input
- The method of moving.
- Specifies a location in the file from where the ib to move the read/write pointer starts. The values and their meanings are described 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.
Return Code
ulrc APIRET) returns
DosSetFilePtrL returns one of the following values:
- 0 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. DosSetFilePtrL cannot be used to move to a negative position in the file.
DosSetFilePtrL cannot be used for a character device or pipe.
Example Code
This example opens or creates and opens a file named DOSTEST.DAT, writes to it, positions the file pointer back to the beginning of the file, reads from the file, and finally closes it.
#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; /* Handle for file being manipulated */
ULONG ulAction = 0; /* Action taken by DosOpenL */
ULONG ulBytesRead = 0; /* Number of bytes read by DosRead */
ULONG ulWrote = 0; /* Number of bytes written by DosWrite */
LONGLONG ullLocal = 0; /* File pointer position after DosSetFilePtr */
UCHAR uchFileName 20 = "dostest.dat", /* Name of file */
uchFileData 100 = " "; /* Data to write to file */
APIRET rc = NO_ERROR; /* Return code */
/* Open the file test.dat. Use an existing file or create a new */
/* one if it doesn't exist. */
rc = DosOpenL(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 */if (rc != NO_ERROR)
printf("DosOpenL error return code = %u\n", rc);
return 1;
else
printf ("DosOpenL Action taken = %ld\n", ulAction);
/* endif */
/* Write a string to the file */
strcpy (uchFileData, "testing...\n1...\n2...\n3\n");
rc = DosWrite (hfFileHandle, /* File handle */
(PVOID) uchFileData, /* String to be written */
sizeof (uchFileData), /* Size of string to be written */
ulWrote); /* Bytes actually written */
if (rc != NO_ERROR)
printf("DosWrite error return code = %u\n", rc);
return 1;
else
printf ("DosWrite Bytes written = %u\n", ulWrote);
/* endif */
/* Move the file pointer back to the beginning of the file */
rc = DosSetFilePtrL (hfFileHandle, /* File Handle */
(LONGLONG)0, /* Offset */
FILE_BEGIN, /* Move from BOF */
ullLocal); /* New location address */
if (rc != NO_ERROR)
printf("DosSetFilePtrL error return code = %u\n", rc);
return 1;
/* Read the first 100 bytes of the file */
rc = DosRead (hfFileHandle, /* File Handle */
uchFileData, /* String to be read */
100L, /* Length of string to be read */
ulBytesRead); /* Bytes actually read */
if (rc != NO_ERROR)
printf("DosRead error return code = %u\n", rc);
return 1;
else
printf ("DosRead Bytes read = %u\n%s\n", ulBytesRead, uchFileData);
/* endif */
rc = DosClose(hfFileHandle); /* Close the file */
if (rc != NO_ERROR)
printf("DosClose error return code = %u\n", rc);
return 1;
return NO_ERROR;