Jump to content

DosCancelLockRequestL: Difference between revisions

From EDM2
Ak120 (talk | contribs)
No edit summary
Ak120 (talk | contribs)
mNo edit summary
Line 2: Line 2:


==Syntax==
==Syntax==
  DosCancelLockRequestL ( hFile, pflLock)
  DosCancelLockRequestL (hFile, pflLock)


==Parameters==
==Parameters==
Line 11: Line 11:
  ulrc (APIRET) returns
  ulrc (APIRET) returns
DosCancelLockRequestL returns one of the following values
DosCancelLockRequestL returns one of the following values
* 0       NO_ERROR
* 0   NO_ERROR
*         ERROR_INVALID_HANDLE
*     ERROR_INVALID_HANDLE
* 87       ERROR_INVALID_PARAMETER  
* 87 ERROR_INVALID_PARAMETER  
* 173     ERROR_CANCEL_VIOLATION
* 173 ERROR_CANCEL_VIOLATION


==Remarks==
==Remarks==
Line 26: Line 26:


==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 32:
#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 */
            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 LockArea    = 0 ,        /* Area of file to lock */
   FILELOCKL LockArea    = 0,        /* Area of file to lock */
  UnlockArea  = 0 ;        /* Area of file to unlock */
            UnlockArea  = 0;        /* Area of file to unlock */


   rc = DosOpenL("canlock.dat",                /* File to open */
   rc = DosOpenL("canlock.dat",                /* File to open */
Line 53: Line 53:
                 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);
    printf("DosOpenL error  return code = %u\n", rc);
  return 1;   
    return 1;   
   
   
   LockArea.lOffset = 0;              /* Start locking at beginning of file */
   LockArea.lOffset = 0;              /* Start locking at beginning of file */
Line 61: Line 61:
   UnLockArea.lRange =  0;            /* Use a unlock range of 0 bytes      */
   UnLockArea.lRange =  0;            /* Use a unlock range of 0 bytes      */


   rc = DosSetFileLocksL(FileHandle,       /* File handle  */
   rc = DosSetFileLocksL(FileHandle,   /* File handle  */
                         UnlockArea,       /* No unlock area */
                         UnlockArea,   /* No unlock area */
                         LockArea,         /* Lock current record */
                         LockArea,     /* Lock current record */
                         2000L,           /* Lock time-out value of 2 seconds */
                         2000L,       /* Lock time-out value of 2 seconds */
0L);               /* Exclusive lock, not atomic */
                        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), Wrote);
  if (rc != NO_ERROR)
if (rc != NO_ERROR)
    printf("DosWrite error return code = %u\n", rc);
printf("DosWrite error return code = %u\n", rc);
    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,       /* File handle   */
  rc = DosSetFileLocksL(FileHandle,   /* File handle */
UnlockArea,       /* Unlock area */
      UnlockArea,                   /* Unlock area */
LockArea,         /* No Lock */
      LockArea,                     /* No Lock */
2000L,             /* Lock time-out value of 2 seconds */
      2000L,                         /* Lock time-out value of 2 seconds */
0L);               /* Exclusive lock, not atomic */
      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);
  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>



Revision as of 02:40, 15 September 2017

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;
}

Related Functions