DosSetFilePtrL: Difference between revisions
Appearance
mNo edit summary |
m Ak120 moved page OS2 API:CPI:DosSetFilePtrL to DosSetFilePtrL |
(No difference)
|
Revision as of 02: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;