HPlogo KSAM/3000 Reference Manual: HP 3000 MPE/iX Computer Systems > Chapter 4 USING KSAM FILES IN SPL PROGRAMS

FCLOSE

» 

Technical documentation

Complete book in PDF
» Feedback

 » Table of Contents

Closes a file.

 

              IV       IV       IV 

    FCLOSE(filenum,disposition,seccode); 

The FCLOSE intrinsic terminates access to a file. This intrinsic applies to files on all devices. FCLOSE deletes the buffers and control blocks through which the user process accessed the file. It also deallocates the device on which the file resides and it may change the disposition of the file. If you do not issue FCLOSE calls for all files opened by your process, such calls are issued automatically by MPE when the process terminates.

PARAMETERS

filenum

integer by value (required)

A word identifier supplying the file number of the file to be closed.

disposition

integer by value (required)

Indicates the disposition of the file, significant only for files on disc. This disposition can be overridden by a corresponding parameter in a :FILE command entered prior to program execution. The disposition options are defined in Table 4-4 “FCLOSE disposition Parameter Bit Settings” Default: disposition is zero for no change, no return of disc space.

seccode

integer by value (required)

Denotes the type of security initially applied to the file, significant only for new permanent files. The options are:

0 -- Unrestricted access -- the file can be accessed by any user, unless prohibited by current MPE provisions.

1 -- Private file creator security -- the file can be accessed only by its creator. Default: seccode is zero for unrestricted access.

NOTE: Both parameters are required when FCLOSE is specified in a program; the default values are used when MPE closes any open files at the end of a job or session.

Table 4-4 FCLOSE disposition Parameter Bit Settings

0123456789101112131415
 Disc SpaceDomain
Set shaded areas to zero for KSAM files.
BITSOPTION SETTINGS
13:3 Domain 000 = No change. (default) The disposition code remains as it was before the file was opened. Thus, if the file is new, it is deleted by FLCOSE: otherwise, the file is assigned the domain to which it previously belonged.
   001 = Permanent file. If a disc file, it is saved in the system domain. If the file is a new or temporary file, an entry is created for it in the system file directory. An error code is returned if a file of the same name already exists in the directory. This disposition has no effect when the file is an old permanent file on disc.
   010 = Temporary job file. This file is retained in the user's temporary (job/session) file domain. It can be requested by any process within the job/session. The uniqueness of the file name is checked and if a file of the same name already exists, an error code is returned.
   011 = Temporary job file. This option has the same effect as disposition code 010.
   100 = Released file. The file is deleted from the system.
12:1Disc Space Disposition 0 = No return. (default) Any disc space allocated to the file that is beyond the end-of-file indicator is not returned to the system. This option is recommended for KSAM files.
   1 = Return disc space. Any disc space allocated beyond the end-of-file indicator is returned to the system. This option is not recommended for KSAM users since the returned space cannot be recovered.

 

CONDITION CODES

CCE

The file was closed successfully.

CCG

Not returned by this intrinsic.

CCL

The file was not closed, perhaps because an incorrect filenum was specified, or because another file with the same name and disposition exists in the system.

SPECIAL CONSIDERATIONS

Split stack calls permitted.

USING FCLOSE

The FCLOSE intrinsic terminates access to a file so that it cannot be accessed again by the current program until it is re-opened. FCLOSE can also be used to change the disposition currently assigned to a file by a previous FOPEN.

Because of the special structure of KSAM files, it is not good practice to set the disc space bit in the disposition parameter in an attempt to save disc space. For this reason, 4 is the largest value that should be assigned to the disposition parameter when using FCLOSE to close a KSAM file.

When a file is opened by the FOPEN intrinsic, a file count maintained by the system is incremented by one. When the file is closed with FCLOSE, the file count is decremented by one. If more than one FOPEN is in effect for a particular file, its disposition is recorded by the FCLOSE call but is not put into effect until the file count is zero. The effective disposition at that time is the smallest non-zero disposition parameter specified among all the FCLOSE calls issued against the file. For example, a file XYZ is opened three successive times by a process. The first FCLOSE disposition is 1, the second FCLOSE disposition is 4, and the third and last FCLOSE disposition is 2. The final disposition of the file XYZ is 1, that is, it is saved as a permanent file with no return of disc space.

The use of FCLOSE differs slightly in its application to new files or to existing files

CLOSING A NEW KSAM FILE

When a new file is created by FOPEN, the job temporary and system file domains are not searched to determine whether a file of the same name exists already. Only when a file is closed and saved as a permanent or temporary file with FCLOSE, is such a search conducted. The job temporary file domain is searched if the file is closed with the domain field of disposition set to 2 or 3 (save as temporary file); the system file domain is searched if the file is closed with domain set to 1 (save as permanent file). If a file of the same name is found in either directory, an error code is returned. Thus it is possible to open a new file with the same name as an existing file, but an error results if FCLOSE is used to save such a file in the same domain with a file of the same name.

In general, unless you plan to use the file once and then delete it, a newly created file should be closed using FCLOSE with the disposition parameter set to 1, 2, or 3. There is no need to set disposition to 4 in order to delete a new file since a new file is deleted when it is closed with a disposition of 0.

The security code parameter (seccode) is set only when the disposition parameter is set to 1. If you want exclusive access to a file being saved as a new permanent file, you should set seccode to 1 when you close the file for the first time. Otherwise, the file can be accessed by any other user.

In Title not available, a new file is closed and saved as a permanent file in the system file domain (disposition = 1), and access is permitted to the file by other users (seccode = 0).

CLOSING AN EXISTING KSAM FILE

Unless you plan to change the domain where a file is saved, you usually close an existing file with both FCLOSE parameters set to zero. There are two limitations: you cannot change an existing permanent file to a temporary file, and you cannot change the security code that was assigned to a permanent file at creation.

Figure 4-1 FCLOSE Example

 



<<**************************************>> 

<<* READ DATA FROM $STDIN DEVICE       *>> 

<<**************************************>> 

L1 : 

READ(INPUT,-72): <<READ ONE RECORD FROM $STDIN>> 

IF > 

THEN BEGIN <<END OF FILE ON $STDIN>> 

  FCLOSE(FILNUM,1,0); <<CLOSE THE KSAM FILE>> 

  IF << THEN 

    BEGIN <<CANNOT CLOSE THE KSAM FILE>> 

       MOVE MESSAGE:="CANNOT CLOSE THE KSAM FILE": 

       PRINT (MESSAGE,-29,0): 

       FCHECK(FILNUM,ERRORCODE): <<GET THE ERROR NUMBER>> 

       FERRMSG(ERRORCODE,MESSAGE,LENGTH):<<GET MESSAGE STRING>> 

       PRINT(MESSAGE,-LENGTH,0)1 <<PRINT ERROR MESSAGE>>

    END; 

  TERMINATE; 

 END; 

IF < 

THEN BEGIN 

  MOVE MESSAGE:="ERROR OCCURRED WHILE READING INPUT"; 

  PRINT(MESSAGE,-34,0); 

  TERMINATE; 

 END; 

PRINT(OUTPUT,-72,0); <<ECHO CHECK>> 

Assume, for example, that a file was closed as a job temporary file. Should you want to make the file permanent, close the file with the following call:

 

    FCLOSE(FILENUM,1,0) close job temporary file as permanent file 

If, however, you want to maintain this file with its cuff ent disposition, you would close it with the following call:

 

    FCLOSE(FILENUM,0,0) close file with current disposition 

Regardless of the value assigned to seccode, the type of security initially applied to the file when it is closed as a new permanent file is not subsequently changed.

DELETING A KSAM FILE

The FCLOSE intrinsic can be used to delete a KSAM file from the system. If you intend to use a new file once only, you can delete it at the same time you close it for the first time by setting the FCLOSE parameters to zero:

 

    FCLOSE(FILNUM,0,0) delete a new file 

In this case, because disposition is zero, the file is returned to its domain before FCLOSE is executed. Since the file is not assigned a domain until it is closed the first time, this effectively deletes the file.

A file that has been assigned to a domain by a previous FCLOSE, can be deleted by the call:

 

     FCLOSE(FILNUM,4,0) delete an existing file 

Note that the only other methods for deleting a KSAM file are to use the KSAMUTIL>PURGE command, or to issue two MPE :PURGE commands, one for the data file and one for the key file.

Feedback to webmaster