Xiao Qing
作者Xiao Qing·2021-12-20 14:11
系统工程师·浪潮商用机器有限公司

用CLP程序实现1分钟后自动删除文件

字数 3265阅读 8598评论 0赞 3

某些用户需要在 OS/400 系统中创建临时文件用于显示或缓存某些数据,这个文件使用一段时间之后就会被废弃,如果忘记清除,会占用系统的存储资源。下面介绍用 CLP 程序实现在某段时间之后自动清除临时文件的方法。

PGM
/*-------------------------------------------------------------------*/
/*   DELETE BUFFER FILE AFTER 1 MINUTES      */
/*   CONTROL LANGUAGE PROGRAM                   */
/*                                                                                */
/*   CREATED BY XIAO QING ,2021/12                    */
/*-------------------------------------------------------------------*/
/* DEFINE VARIABLE NAME FOR PYHSICAL FILE */
             DCL        VAR(&PF) TYPE(*CHAR) LEN(128)
/* DEFINE VARIABLE NAME RELATE 1 MINUTES */
             DCL        VAR(&DATETIME) TYPE(*CHAR) LEN(20)
             DCL        VAR(&DATE) TYPE(*CHAR) LEN(6)
             DCL        VAR(&TIME) TYPE(*CHAR) LEN(6)
             DCL        VAR(&HOUR) TYPE(*DEC) LEN(2 0)
             DCL        VAR(&HOURC) TYPE(*CHAR) LEN(2)
             DCL        VAR(&MINUTE) TYPE(*DEC) LEN(2 0)
             DCL        VAR(&MINUTEC) TYPE(*CHAR) LEN(2)
             DCL        VAR(&SECOND) TYPE(*DEC) LEN(2 0)
             DCL        VAR(&SECONDC) TYPE(*CHAR) LEN(2)
             MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))
             ADDLIBLE   LIB(XQLIB)
             MONMSG     MSGID(CPF2103)
 /* RETRIVE SYSTEM TIME */
             RTVJOBA    DATETIME(&DATETIME)

 /* ENTER THE PYHSICAL FILE NAME */
             CHGVAR     VAR(&PF) VALUE('BUFFILE1')

             CHKOBJ     OBJ(&PF) OBJTYPE(*FILE) MBR(*FIRST)
             MONMSG     MSGID(CPF9801) EXEC(GOTO CMDLBL(FND))
 /* DELETE FILE NAME AFTER 1 MINUTES*/
             RTVSYSVAL  SYSVAL(QDATE) RTNVAR(&DATE)
             RTVSYSVAL  SYSVAL(QTIME) RTNVAR(&TIME)
             CHGVAR     VAR(&HOUR) VALUE(%SST(&TIME 1 2))
             CHGVAR     VAR(&MINUTE) VALUE(%SST(&TIME 3 2))
             CHGVAR     VAR(&SECOND) VALUE(%SST(&TIME 5 2))
             CHGVAR     VAR(&MINUTE) VALUE(&MINUTE + 1)
             IF         COND(&MINUTE >= 60) THEN(DO)
             CHGVAR     VAR(&HOUR) VALUE(&HOUR + 1)
             CHGVAR     VAR(&MINUTE) VALUE(1)
             ENDDO

             CHGVAR     VAR(&HOURC) VALUE(&HOUR)
             CHGVAR     VAR(&MINUTEC) VALUE(&MINUTE)
             CHGVAR     VAR(&SECONDC) VALUE(&SECOND)
             CHGVAR     VAR(&TIME) VALUE(&HOURC *CAT &MINUTEC *CAT +
                          &SECONDC)
 /* SUBMIT A BATCH JOB TO DELETE PYHSICAL FILE */
             SBMJOB     CMD(DLTF FILE(XQLIB/&PF)) JOB(DLTFILE) +
                          SCDDATE(&DATE) SCDTIME(&TIME) MSGQ(*NONE)
             DLYJOB     DLY(90)
             CHKOBJ     OBJ(&PF) OBJTYPE(*FILE) MBR(*FIRST)
             MONMSG     MSGID(CPF9801) EXEC(GOTO CMDLBL(END))

ERROR:
             SNDPGMMSG  MSG('THERE ARE SOME ERROR, CHECK THE PROGRAM')
END:
             SNDPGMMSG  MSGID(XQL0001) MSGF(XQLIB/XQMSGF) MSGDTA(&PF)
FND:
             SNDPGMMSG  MSGID(XQL0002) MSGF(XQLIB/XQMSGF) MSGDTA(&PF)
             ENDPGM

然后验证一下这个程序:

  1. 执行这个 CLP 程序
    CALL XQLIB/DLT1M

    红色方块儿中的部分提示 XQLIB/BUFFILE1 文件已被删除。
  2. 再执行一遍
    CALL XQLIB/DLT1M

    上图红色方块儿中的部分提示 XQLIB/BUFFILE1 文件已不存在了。

仅供参考。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

3

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

X社区推广