HP 3000 Manuals

CKLOCK [ KSAM/3000 Reference Manual ] MPE/iX 5.0 Documentation


KSAM/3000 Reference Manual

CKLOCK 

A call to CKLOCK dynamically locks a KSAM file.

     CALL "CKLOCK" USING filetable, status, lockcond 

When access is shared, you must lock the file before calling CKWRITE,
CKREWRITE, or CKDELETE. This insures that another user cannot attempt to
modify the file at the same time, and it guarantees that the most recent
data is available to each user who accesses the file.

In order to call CKLOCK, the file must have been opened with a call to
CKOPENSHR, not CKOPEN.

PARAMETERS 

filetable        an 8-word record containing the number and name of the
                 file, its input-output type, access mode, and a code
                 indicating whether the previous operation was successful
                 and if so, what it was.  (Refer to Filetable Parameter
                 discussion earlier in this section.)

status           one-word (two 8-bit characters) set to a pair of values
                 upon completion of the call to CKLOCK. It indicates
                 whether or not the file was successfully locked and if
                 not, why not.  The status word ="00" if the call was
                 successful.  It ="30" if the file was locked by another
                 process; it = "9n," where n is a file system error code,
                 if the call failed for some other reason.  (Refer to the
                 Status Parameter discussion earlier in this section.)

lockcond         one-word computational item whose value determines the
                 action taken if the file is locked by another user when
                 CKLOCK is executed.  The value is either zero (0) or one
                 (1).

                 0                locking is conditional; if the file is
                                  already locked, control is returned to
                                  your program immediately with the
                                  status word set to "30".

                 1                locking is unconditional; if the file
                                  cannot be locked immediately because
                                  another use has locked it, your program
                                  suspends until the file can be locked.

USING CKLOCK 

In order to call CKLOCK, the file must be opened with dynamic access
enabled.  This can be done only with the CKOPENSHR procedure.  CKOPEN
will not open the file for shared access with dynamic locking.

When users are sharing a file, it is essential to lock the file before
modifying it.  An error is returned if any user attempts to write,
rewrite, or delete records without first locking the file.  It is also
important to avoid situations where one user locks the file and forgets
to unlock it.  If the file is already locked when you call CKLOCK with
lockcond set to zero, the call will fail with "30" returned to status,
and your process will continue.  If, however, lockcond is set to 1, your
process suspends until the other user unlocks the file or logs off.

EXAMPLES 

The following example opens file KSAMFILE for shared access with dynamic
locking allowed.  It then locks the file unconditionally.  If another
user has locked the file, the process suspends until the file is unlocked
and then continues by locking your file.  The status value is checked as
soon as control returns to your process to insure that the file has been
locked before continuing.

      DATA DIVISION.

      77   LOCKCOND        PICTURE S9(4)   COMP   VALUE 1.
      77   RESULT          PICTURE 9(4)           VALUE 0.
      01   STATUSKEY.
         02 STATUS-KEY1  PICTURE X VALUE " ".
         02 STATUS-KEY2  PICTURE X VALUE " ".
      01   FILETABLE.
         02  FILENUMBER  PICTURE S9(4)   COMP   VALUE 0.
         02  FILENAME    PICTURE X(8)           VALUE "KSAMFILE".
         02  I-O-TYPE    PICTURE S9(4)   COMP   VALUE 0.
         02  A-MODE      PICTURE S9(4)   COMP   VALUE 0.
         02  PREV-OP     PICTURE S9(4)   COMP   VALUE 0.

      PROCEDURE DIVISION.

      START.
          CALL "CKOPENSHR" USING FILETABLE, STATUSKEY.
          IF STATUS-KEY1 = "0" THEN GO TO LOCK-FILE.
          IF STATUS-KEY1 = "9" THEN
            CALL "CKERROR" USING STATUSKEY, RESULT
              DISPLAY "ERROR NO. ",RESULT.

      LOCK-FILE.
          CALL "CKLOCK" USING FILETABLE, STATUSKEY, LOCKCOND.
          IF STATUSKEY="0"
            THEN DISPLAY "CKLOCK IS OK"
          ELSE IF STATUSKEY = "30"
                 THEN DISPLAY"FILE LOCKED BY ANOTHER PROCESS"
              ELSE IF STATUS-KEY1="9"
       THEN CALL "CKERROR" USING STATUSKEY, RESULT
     DISPLAY "ERROR NO.", RESULT.



MPE/iX 5.0 Documentation