DosCancelLockRequestL: Difference between revisions
Appearance
No edit summary |
mNo edit summary |
||
(One intermediate revision by the same user not shown) | |||
Line 2: | Line 2: | ||
==Syntax== | ==Syntax== | ||
DosCancelLockRequestL ( hFile, pflLock) | DosCancelLockRequestL (hFile, pflLock) | ||
==Parameters== | ==Parameters== | ||
;hFile (HFILE) input : File handle used in the DosSetFileLocksL function that is to be cancelled. | ;hFile (HFILE) input : File handle used in the [[DosSetFileLocksL]] function that is to be cancelled. | ||
;pflLockL (PFILELOCKL) input : Address of the structure describing the lock request to cancel. | ;pflLockL (PFILELOCKL) input : Address of the structure describing the lock request to cancel. | ||
==Return Code== | ==Return Code== | ||
;ulrc (APIRET) returns:DosCancelLockRequestL returns one of the following values | |||
DosCancelLockRequestL returns one of the following values | * 0 NO_ERROR | ||
* 0 | * ERROR_INVALID_HANDLE | ||
* | * 87 ERROR_INVALID_PARAMETER | ||
* 87 | * 173 ERROR_CANCEL_VIOLATION | ||
* 173 | |||
==Remarks== | ==Remarks== | ||
Line 26: | Line 25: | ||
==Example Code== | ==Example Code== | ||
This example opens a file named CANLOCK.DAT , locks a block of the data, writes some data to it, and then cancels the lock request. | This example opens a file named CANLOCK.DAT, locks a block of the data, writes some data to it, and then cancels the lock request. | ||
<PRE> | <PRE> | ||
#define INCL_DOSFILEMGR /* File Manager values */ | #define INCL_DOSFILEMGR /* File Manager values */ | ||
Line 32: | Line 31: | ||
#include <os2.h> | #include <os2.h> | ||
#include <stdio.h> | #include <stdio.h> | ||
#include <string.h> | #include <string.h> | ||
int main(VOID){ | int main(VOID){ | ||
HFILE FileHandle = NULLHANDLE; /* File handle */ | HFILE FileHandle = NULLHANDLE; /* File handle */ | ||
ULONG Action = 0, /* Action taken by DosOpenL */ | ULONG Action = 0, /* Action taken by DosOpenL */ | ||
Wrote = 0; /* Number of bytes written by DosWrite */ | |||
CHAR FileData 40 = "Forty bytes of demonstration text data\r\n"; | CHAR FileData 40 = "Forty bytes of demonstration text data\r\n"; | ||
APIRET rc = NO_ERROR; /* Return code */ | APIRET rc = NO_ERROR; /* Return code */ | ||
FILELOCKL | FILELOCKL LockArea = 0, /* Area of file to lock */ | ||
UnlockArea = 0; /* Area of file to unlock */ | |||
rc = DosOpenL("canlock.dat", /* File to open */ | rc = DosOpenL("canlock.dat", /* File to open */ | ||
Line 53: | Line 52: | ||
0L); /* No extended attributes */ | 0L); /* No extended attributes */ | ||
if (rc != NO_ERROR) /* If open failed */ | if (rc != NO_ERROR) /* If open failed */ | ||
printf("DosOpenL error return code = %u\n", rc); | |||
return 1; | |||
LockArea.lOffset = 0; /* Start locking at beginning of file */ | LockArea.lOffset = 0; /* Start locking at beginning of file */ | ||
Line 61: | Line 60: | ||
UnLockArea.lRange = 0; /* Use a unlock range of 0 bytes */ | UnLockArea.lRange = 0; /* Use a unlock range of 0 bytes */ | ||
rc = DosSetFileLocksL(FileHandle, | rc = DosSetFileLocksL(FileHandle, /* File handle */ | ||
UnlockArea, | UnlockArea, /* No unlock area */ | ||
LockArea, | LockArea, /* Lock current record */ | ||
2000L, | 2000L, /* Lock time-out value of 2 seconds */ | ||
0L); | 0L); /* Exclusive lock, not atomic */ | ||
if (rc != NO_ERROR) | if (rc != NO_ERROR) | ||
printf("DosSetFileLocks error return code = %u\n", rc); | printf("DosSetFileLocks error return code = %u\n", rc); | ||
return 1; | return 1; | ||
rc = DosWrite(FileHandle, FileData, sizeof(FileData), Wrote); | |||
rc = DosWrite(FileHandle, FileData, sizeof(FileData), | if (rc != NO_ERROR) | ||
if (rc != NO_ERROR) | printf("DosWrite error return code = %u\n", rc); | ||
printf("DosWrite error | return 1; | ||
return 1; | |||
/* Should check if (rc != NO_ERROR) here... */ | /* Should check if (rc != NO_ERROR) here... */ | ||
LockArea.lOffset = 0; /* Start locking at beginning of file */ | LockArea.lOffset = 0; /* Start locking at beginning of file */ | ||
LockArea.lRange = 0; /* Use a lock range of 40 bytes */ | LockArea.lRange = 0; /* Use a lock range of 40 bytes */ | ||
UnLockArea.lOffset = 0; /* Start locking at beginning of file */ | UnLockArea.lOffset = 0; /* Start locking at beginning of file */ | ||
UnLockArea.lRange = 40; /* Use a lock range of 40 bytes */ | UnLockArea.lRange = 40; /* Use a lock range of 40 bytes */ | ||
rc = DosSetFileLocksL(FileHandle, | rc = DosSetFileLocksL(FileHandle, /* File handle */ | ||
UnlockArea, /* Unlock area */ | |||
LockArea, /* No Lock */ | |||
2000L, | 2000L, /* Lock time-out value of 2 seconds */ | ||
0L); | 0L); /* Exclusive lock, not atomic */ | ||
if (rc != NO_ERROR) | if (rc != NO_ERROR) | ||
printf("DosSetFileLocksL error return code = %u\n", rc); | printf("DosSetFileLocksL error return code = %u\n", rc); | ||
return 1; | return 1; | ||
rc = DosClose(FileHandle); | |||
/* Should check if (rc != NO_ERROR) here... */ | /* Should check if (rc != NO_ERROR) here... */ | ||
return NO_ERROR; | return NO_ERROR; | ||
rc = DosClose(FileHandle); | rc = DosClose(FileHandle); | ||
/* Should check if (rc != NO_ERROR) here... */ | /* Should check if (rc != NO_ERROR) here... */ | ||
return NO_ERROR; | return NO_ERROR; | ||
} | |||
</PRE> | </PRE> | ||
Latest revision as of 22:48, 7 January 2024
DosCancelLockRequestL cancels an outstanding DosSetFileLocksL request.
Syntax
DosCancelLockRequestL (hFile, pflLock)
Parameters
- hFile (HFILE) input
- File handle used in the DosSetFileLocksL function that is to be cancelled.
- pflLockL (PFILELOCKL) input
- Address of the structure describing the lock request to cancel.
Return Code
- ulrc (APIRET) returns
- DosCancelLockRequestL returns one of the following values
- 0 NO_ERROR
- ERROR_INVALID_HANDLE
- 87 ERROR_INVALID_PARAMETER
- 173 ERROR_CANCEL_VIOLATION
Remarks
DosCancelLockRequestL allows a process to cancel the lock range request of an outstanding DosSetFileLocksL function.
If two threads in a process are waiting on a lock file range, and another thread issues DosCancelLockRequestL for that lock file range, then both waiting threads are released.
Not all file-system drivers (FSDs) can cancel an outstanding lock request.
Local Area Network (LAN) servers cannot cancel an outstanding lock request if they use a version of the operating system prior to OS/2 Version 2.00.
Example Code
This example opens a file named CANLOCK.DAT, locks a block of the data, writes some data to it, and then cancels the lock request.
#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 FileHandle = NULLHANDLE; /* File handle */ ULONG Action = 0, /* Action taken by DosOpenL */ Wrote = 0; /* Number of bytes written by DosWrite */ CHAR FileData 40 = "Forty bytes of demonstration text data\r\n"; APIRET rc = NO_ERROR; /* Return code */ FILELOCKL LockArea = 0, /* Area of file to lock */ UnlockArea = 0; /* Area of file to unlock */ rc = DosOpenL("canlock.dat", /* File to open */ FileHandle, /* File handle */ Action, /* Action taken */ 256, /* File primary allocation */ FILE_ARCHIVED, /* File attributes */ FILE_OPEN | FILE_CREATE, /* Open function type */ OPEN_ACCESS_READWRITE | OPEN_SHARE_DENYNONE, 0L); /* No extended attributes */ if (rc != NO_ERROR) /* If open failed */ printf("DosOpenL error return code = %u\n", rc); return 1; LockArea.lOffset = 0; /* Start locking at beginning of file */ LockArea.lRange = 40; /* Use a lock range of 40 bytes */ UnLockArea.lOffset = 0; /* Start unlocking at beginning of file */ UnLockArea.lRange = 0; /* Use a unlock range of 0 bytes */ rc = DosSetFileLocksL(FileHandle, /* File handle */ UnlockArea, /* No unlock area */ LockArea, /* Lock current record */ 2000L, /* Lock time-out value of 2 seconds */ 0L); /* Exclusive lock, not atomic */ if (rc != NO_ERROR) printf("DosSetFileLocks error return code = %u\n", rc); return 1; rc = DosWrite(FileHandle, FileData, sizeof(FileData), Wrote); if (rc != NO_ERROR) printf("DosWrite error return code = %u\n", rc); return 1; /* Should check if (rc != NO_ERROR) here... */ LockArea.lOffset = 0; /* Start locking at beginning of file */ LockArea.lRange = 0; /* Use a lock range of 40 bytes */ UnLockArea.lOffset = 0; /* Start locking at beginning of file */ UnLockArea.lRange = 40; /* Use a lock range of 40 bytes */ rc = DosSetFileLocksL(FileHandle, /* File handle */ UnlockArea, /* Unlock area */ LockArea, /* No Lock */ 2000L, /* Lock time-out value of 2 seconds */ 0L); /* Exclusive lock, not atomic */ if (rc != NO_ERROR) printf("DosSetFileLocksL error return code = %u\n", rc); return 1; rc = DosClose(FileHandle); /* Should check if (rc != NO_ERROR) here... */ return NO_ERROR; rc = DosClose(FileHandle); /* Should check if (rc != NO_ERROR) here... */ return NO_ERROR; }