DCB Handling API

본 부록에서는 DCB Handling API의 인터페이스를 사용하여 JCL에서 할당된 DD에 대한 속성정보를 조회하거나 일부 속성을 변경하는 방법에 대해서 설명한다.

1. 개요

OpenFrame에서 제공하는 DCB(Data Control Block) Handling API 인터페이스를 사용하면, JCL에서 할당된(Allocated) DD(Data Definition)에 대한 속성 정보를 조회하거나 일부 속성을 변경할 수 있다. 또한 응용프로그램에서 Dynamic Allocation을 수행할수 있다.

DCB Handling API를 사용해서 프로그램을 작성하려면 OpenFrame 바이너리와 함께 배포되는 tdcb.h 헤더 파일을 사용자 프로그램에 포함해야 하고, 사용자 프로그램을 컴파일 할 때 libtdcb.so 라이브러리를 링크해 주어야 한다.

DCB Handling API의 인터페이스는 다음과 같이 분류할 수 있다.

  • Allocation Handle

    API 설명

    tdcb_get_handle()

    JCL에서 DD 문으로 할당된 DCB 정보를 DD 명으로 찾는다.

    tdcb_discard_handle()

    tdcb_get_handle() API로 찾은 Allocation 정보를 해제한다.

    tdcb_print_info()

    tdcb_get_handle() API로 찾은 Allocation 정보를 출력한다.

  • DCB Information

    API 설명

    tdcb_get_type()

    DCB 유형과 순차 연결(Concatenation)의 개수를 얻는다.

    tdcb_maxlrecl()

    최대 논리 레코드 길이와 평균 논리 레코드 길이를 얻는다.

    tdcb_nvsm_info()

    Non-VSAM 데이터셋의 DSORG 속성과 RECFM 속성을 얻는다.

  • Get Attributes

    API 설명

    tdcb_get_dsname()

    데이터셋의 이름과 멤버 이름을 얻는다.

    tdcb_get_volser()

    데이터셋의 볼륨 시리얼 정보를 얻는다.

    tdcb_get_flags()

    데이터셋의 여러가지 기타 속성을 얻는다.

    tdcb_get_blksize()

    데이터셋의 블록 크기와 레코드 길이를 얻는다.

    tdcb_get_key_info()

    데이터셋의 키 위치와 키 길이 정보를 얻는다.

    tdcb_get_vsamtype()

    VSAM 데이터셋의 유형과 AIX 속성을 얻는다.

  • Set Attributes

    API 설명

    tdcb_set_lrecl()

    데이터셋의 논리 레코드 길이를 지정한다.

    tdcb_set_recfm()

    데이터셋의 RECFM 속성을 지정한다.

    tdcb_set_blksize()

    데이터셋의 블록 크기를 지정한다.

    tdcb_set_keylen()

    데이터셋의 키 길이와 키 위치 정보를 지정한다.

  • Dynamic Allocation

    API 설명

    tdcb_allocate()

    데이터셋에 대해 dynamic allocation을 수행한다.

    tdcb_concatenate()

    Dynamic allocation을 수행한 DD에 데이터셋을 concatenation을 수행한다.

    tdcb_unallocate()

    Dynamic allocation을 수행한 DD에 대해 allocation을 해제한다.

2. Allocation Handle

2.1. tdcb_get_handle()

JCL에서 DD 문으로 할당된 DCB 정보를 DD 명으로 찾는다. tdcb_get_handle() API를 수행하면, JCL에 의해 Shared Memory에 구성된 DCB 정보의 일부를 Local Memory 영역에 재구성해서 이후의 Allocation 정보에 대한 접근을 용이하게 해준다.

성공적으로 Allocation 정보를 찾은 경우에는 음수가 아닌 Allocation Handle을 반환하고, 반환된 Allocation Handle은 이후의 DCB 정보 조회 함수나 속성을 변경하는 함수 등에서 사용된다.

  • 프로토타입

    int tdcb_get_handle(char *ddname);
  • 파라미터

    파라미터 설명

    ddname (입력)

    얻으려고 하는 Allocation 정보의 DD명이다.

  • 반환값

    성공적으로 Allocation 정보를 찾은 경우 음수가 아닌 Allocation Handle을 반환하고, 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환되며, 상황에 따라 별도의 에러코드를 메시지에 표시한다.

2.2. tdcb_discard_handle()

tdcb_get_handle() API로 찾은 Allocation 정보를 해제한다. 즉, Local Memory 영역에 구성된 DCB 정보가 해제된다. 따라서, 동일한 DD의 DCB 정보를 다시 이용하려면 tdcb_get_handle() API를 다시 호출해야 한다.

tdcb_get_handle() API를 호출해서 얻은 Allocation 정보를 tdcb_discard_handle() API를 이용해서 반드시 해제할 필요는 없지만, 동일한 DD에 대해 tdcb_get_handle() API를 반복적으로 호출하면, 해당 DD 정보가 이미 Local Memory 영역에 구성되어 있다는 경고 메시지가 발생한다.

C 모듈에서 tdcb_discard_handle() API로 Allocation 정보를 해제하지 않은 DD에 대해 COBOL 모듈에서 OPEN 문이 수행되어도, 내부적으로 tdcb_get_handle() API와 유사한 API가 호출되어 동일한 경고 메시지가 발생한다.

  • 프로토타입

    int tdcb_discard_handle(int handle);
  • 파라미터

    파라미터 설명

    handle (입력)

    tdcb_get_handle() API로 얻은 Allocation Handle이다.

  • 반환값

    정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환되며, 상황에 따라 별도의 에러코드를 메시지에 표시한다.

2.3. tdcb_print_info()

tdcb_get_handle() API로 찾은 Allocation 정보를 출력한다.

출력되는 Allocation 정보는 다음과 같은 정보를 포함한다.

DD명, JOB명, 할당 날짜, 할당 시간, 순차 연결 개수
+ [순번] 슬롯 번호, DCB 유형, DCB 이름, DISPOSITION
  • 프로토타입

    int tdcb_print_info(int handle);
  • 파라미터

    파라미터 설명

    handle (입력)

    tdcb_get_handle() API로 얻은 Allocation Handle이다.

  • 반환값

    정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환되며, 상황에 따라 별도의 에러코드를 메시지에 표시한다.

3. DCB Information

3.1. tdcb_get_type()

tdcb_get_handle() API를 수행해서 얻은 Allocation 정보에서 DCB 유형과 순차 연결(Concatenation)의 개수를 얻는다.

DCB 유형에는 다음과 같은 MACRO가 tdcb.h 헤더 파일에 정의되어 있다.

#define TDCB_DCB_TYPE_NONE              0x00    /* Unknown */
#define TDCB_DCB_TYPE_NVSM              0x01    /* Non-VSAM */
#define TDCB_DCB_TYPE_TSAM              0x02    /* VSAM */
#define TDCB_DCB_TYPE_ISAM              0x03    /* ISAM */

OpenFrame 시스템에서는 2개 이상의 Non-VSAM 데이터셋을 붙여서 마치 하나의 데이터셋처럼 연속적으로 검색할 수 있는 방법을 제공한다. 이것을 순차 연결(Sequential Concatenation)이라고 말한다. 순차 연결의 개수는 몇 개의 데이터셋이 연결되어 있는지 그 개수를 의미한다.

OpenFrame 시스템에서 VSAM 데이터셋은 순차 연결이 지원되지 않는다. DCB 유형이 TSAM인 경우 count 파라미터에는 순차 연결 개수가 아니라 베이스 클러스터(Base Cluster)와 베이스 클러스터에 연결되어 있는 보조 인덱스(Alternate Index)의 총 개수가 구해진다.

  • 프로토타입

    int tdcb_get_type(int handle, int *dcb_type, int *count);
  • 파라미터

    파라미터 설명

    handle (입력)

    tdcb_get_handle() API로 얻은 Allocation Handle이다.

    dcb_type (출력)

    주어진 Allocation 정보의 DCB 유형을 담을 버퍼이다.

    count (출력)

    순차 연결 개수 또는 베이스 클러스터와 보조 인덱스의 총 개수를 담을 버퍼이다.

  • 반환값

    정상적으로 실행된 경우 0을 반환하고, 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환되며, 상황에 따라 별도의 에러코드를 메시지에 표시한다.

3.2. tdcb_maxlrecl()

tdcb_get_handle() API를 수행해서 얻은 Allocation 정보에서 최대 논리 레코드 길이와 평균 논리 레코드 길이를 얻는다.

순차 연결이 되어 있지 않은 Non-VSAM 데이터셋의 경우 또는 고정 길이 VSAM 데이터셋의 경우에는 최대 레코드 길이와 평균 레코드 길이의 값은 동일하다. 하지만, 순차 연결이 되어 있는 Non-VSAM 데이터셋의 경우이거나 가변 길이 VSAM 데이터셋의 경우에는 최대 레코드 길이와 평균 레코드 길이가 다를 수 있다.

가변 길이 Non-VSAM 데이터셋의 경우 레코드 길이는 JCL에서 해당 데이터셋을 할당할 때 지정된 LRECL 값이 전달된다. 즉, RDW를 포함한 논리 레코드 길이가 얻어진다.

  • 프로토타입

    int tdcb_maxlrecl(int handle, int *maxlrecl, int *avglrecl);
  • 파라미터

    파라미터 설명

    handle (입력)

    tdcb_get_handle() API로 얻은 Allocation Handle이다.

    maxlrecl (출력)

    주어진 Allocation 정보의 최대 논리 레코드 길이를 담을 버퍼이다.

    avglrecl (출력)

    주어진 Allocation 정보의 평균 논리 레코드 길이를 담을 버퍼이다.

  • 반환값

    정상적으로 실행된 경우 0을 반환하고, 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환되며, 상황에 따라 별도의 에러코드를 메시지에 표시한다.

3.3. tdcb_nvsm_info()

tdcb_get_handle() API를 수행해서 얻은 Allocation 정보에서 Non-VSAM 데이터셋의 DSORG 속성과 RECFM 속성을 얻는다.

Non-VSAM 데이터셋의 DSORG 속성은 데이터셋의 구조를 지정하고, 다음과 같은 종류의 데이터셋 구조를 나타낼 수 있다.

DSORG 설명

PS(Physical Sequential)

SAM 데이터셋이다.

IS(Indexed Sequential)

ISAM 데이터셋이다.

PO(Partitioned)

PDS 또는 PDSE이다.

DA(Direct)

DAM 데이터셋이다.

Non-VSAM 데이터셋의 RECFM 속성은 레코드의 특징을 나타낸다. RECFM 속성을 지정하는 각각의 문자는 다음과 같은 의미를 지니고 있다.

RECFM 설명

F

고정 길이 레코드이다.

V

가변 길이 레코드이다.

L

라인 순차 레코드이다.

U

불확정 레코드 포맷이다.

B

블록 단위 I/O 지원이다.

A

ANSI 컨트롤 문자를 포함한다.

즉, 고정 길이 레코드에 블록 단위 I/O를 지원하는 데이터셋의 RECFM 속성은 RECFM=FB와 같은 형식으로 지정되고, 가변 길이 레코드에 ANSI 컨트롤 문자가 포함된 데이터셋의 RECFM 속성은 RECFM=VA와 같은 형식으로 지정된다.

순차 연결이 되어 있는 Non-VSAM 데이터셋의 경우 첫 번째 데이터셋의 DSORG 속성과 RECFM 속성이 반환된다(원칙적으로 Mainframe에서는 기본 속성이 다른 Non-VSAM 데이터셋의 순차 연결은 금지되어 있다).

VSAM 데이터셋의 경우에는 고정 길이인지 가변 길이인지의 구분에 따라, DSORG=PS, RECFM=FB 또는 DSORG=PS, RECFM=VB 값이 반환된다.

Allocation 정보에서 DSORG 속성을 얻기 위해서는 최소 8Byte 이상의 문자열 버퍼 포인터를 dsorg 파라미터에 지정해 주어야 하고, RECFM 속성을 얻기 위해서는 최소 8Byte 이상의 문자열 버퍼 포인터를 recfm 파라미터에 지정해야 한다. 사용자 문자열 버퍼가 지정된 경우 DSORG 속성과 RECFM 속성이 NULL 종료 문자와 함께 사용자 버퍼에 복사된다.

  • 프로토타입

    int tdcb_nvsm_info(int handle, char *dsorg, char *recfm);
  • 파라미터

    파라미터 설명

    handle (입력)

    tdcb_get_handle() API로 얻은 Allocation Handle이다.

    dsorg (출력)

    주어진 Allocation 정보의 DSORG 속성을 담을 버퍼이다.

    recfm (출력)

    주어진 Allocation 정보의 RECFM 속성을 담을 버퍼이다.

  • 반환값

    정상적으로 실행된 경우 0을 반환하고, 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환되며, 상황에 따라 별도의 에러코드를 메시지에 표시한다.

4. Get Attributes

4.1. tdcb_get_dsname()

tdcb_get_handle() API로 찾은 Allocation 정보에서 특정 DCB 컴포넌트의 데이터셋 이름과 멤버 이름을 얻는다. DCB 컴포넌트는 순차 연결이 되어 있는 Non-VSAM Allocation 정보에서의 특정 데이터셋 하나를 의미하거나, VSAM Allocation 정보에서의 베이스 클러스터 또는 보조 인덱스 하나를 의미한다.

할당된 데이터셋 이름을 얻기 위해서는 최소 45Byte 이상의 문자열 버퍼 포인터를 dsname 파라미터에 지정해야 한다(NULL 종료 문자와 함께 사용자 버퍼에 복사됨).

할당된 데이터셋이 PDS 또는 PDSE 데이터셋의 멤버일 때 멤버 이름을 얻을 수 있으며, 최소 9Byte 이상의 문자열 버퍼 포인터를 member 파라미터에 지정해야 한다(NULL 종료 문자와 함께 사용자 버퍼에 복사됨).

  • 프로토타입

    int tdcb_get_dsname(int handle, int index, char *dsname, char *member);
  • 파라미터

    파라미터 설명

    handle (입력)

    tdcb_get_handle() API로 얻은 Allocation Handle이다.

    index (입력)

    순차 연결 순번 또는 베이스 클러스터나 보조 인덱스 지정 번호이다.

    dsname (출력)

    해당 DCB 컴포넌트의 데이터셋 이름을 담을 버퍼이다.

    member (출력)

    해당 DCB 컴포넌트의 멤버 이름을 담을 버퍼이다.

  • 반환값

    정상적으로 실행된 경우 0을 반환하고, 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환되며, 상황에 따라 별도의 에러코드를 메시지에 표시한다.

4.2. tdcb_get_volser()

tdcb_get_handle() API로 찾은 Allocation 정보에서 특정 DCB 컴포넌트의 볼륨 시리얼 정보를 얻는다. DCB 컴포넌트는 순차 연결이 되어 있는 Non-VSAM Allocation 정보에서의 특정 데이터셋 하나를 의미하거나, VSAM Allocation 정보에서의 베이스 클러스터 또는 보조 인덱스 하나를 의미한다.

할당된 DCB 컴포넌트의 볼륨 시리얼 정보를 얻기 위해서는 최소 9Byte 이상의 문자열 버퍼 포인터를 volser 파라미터에 지정해야 한다(NULL 종료 문자와 함께 사용자 버퍼에 복사됨).

  • 프로토타입

    int tdcb_get_volser(int handle, int index, char *volser);
  • 파라미터

    파라미터 설명

    handle (입력)

    tdcb_get_handle() API로 얻은 Allocation Handle이다.

    index (입력)

    순차 연결 순번 또는 베이스 클러스터나 보조 인덱스 지정 번호이다.

    volser (출력)

    해당 DCB 컴포넌트의 볼륨 시리얼 정보를 담을 버퍼이다.

  • 반환값

    정상적으로 실행된 경우 0을 반환하고, 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환되며, 상황에 따라 별도의 에러코드를 메시지에 표시한다.

4.3. tdcb_get_flags()

tdcb_get_handle() API로 찾은 Allocation 정보에서 특정 DCB 컴포넌트의 여러 가지 기타 속성을 얻는다. DCB 컴포넌트는 순차 연결이 되어 있는 Non-VSAM Allocation 정보에서의 특정 데이터셋 하나를 의미하거나, VSAM Allocation 정보에서의 베이스 클러스터 또는 보조 인덱스 하나를 의미한다.

DCB 컴포넌트의 여러 가지 기타 속성이란 tdcb.h 헤더 파일에 정의된 다음과 같은 매크로를 의미한다.

#define TDCB_LRECL_NOT_SET              0x01
#define TDCB_RECFM_NOT_SET              0x04
#define TDCB_BLKSIZE_NOT_SET            0x08
#define TDCB_KEYLEN_NOT_SET             0x40
#define TDCB_IS_TAPE_DATASET            0x10
#define TDCB_IS_OPEN_INDICATOR          0x20

각각의 매크로의 의미는 다음과 같다.

매크로 설명

TDCB_LRECL_NOT_SET

카탈로그나 JCL에서 데이터셋의 논리 레코드 길이가 지정되지 않았다.

TDCB_RECFM_NOT_SET

카탈로그나 JCL에서 데이터셋의 RECFM 속성이 지정되지 않았다.

TDCB_BLKSIZE_NOT_SET

카탈로그나 JCL에서 데이터셋의 블록 크기가 지정되지 않았다.

TDCB_KEYLEN_NOT_SET

카탈로그나 JCL에서 데이터셋의 키 길이가 지정되지 않았다.

TDCB_IS_TAPE_DATASET

테이프 볼륨 디바이스에 할당된 데이터셋이다.

TDCB_IS_OPEN_INDICATOR

애플리케이션에서 아직 OPEN API가 호출되지 않았다.

  • 프로토타입

    tdcb_get_flags(int handle, int index, int *flags);
  • 파라미터

    파라미터 설명

    handle (입력)

    tdcb_get_handle() API로 얻은 Allocation Handle이다.

    index (입력)

    순차 연결 순번 또는 베이스 클러스터나 보조 인덱스 지정 번호이다.

    flags (출력)

    해당 DCB 컴포넌트의 여러 가지 기타 속성 정보를 담을 버퍼이다.

  • 반환값

    정상적으로 실행된 경우 0을 반환하고, 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환되며, 상황에 따라 별도의 에러코드를 메시지에 표시한다.

4.4. tdcb_get_blksize()

tdcb_get_handle() API로 찾은 Allocation 정보에서 특정 DCB 컴포넌트의 블록 크기와 레코드 길이를 얻는다. DCB 컴포넌트는 순차 연결이 되어 있는 Non-VSAM Allocation 정보에서의 특정 데이터셋 하나를 의미하거나, VSAM Allocation 정보에서의 베이스 클러스터 또는 보조 인덱스 하나를 의미한다.

가변 길이 Non-VSAM 데이터셋인 경우 레코드 길이는 JCL에서 해당 데이터셋을 할당할 때 지정된 LRECL 값이 전달된다. 즉, RDW를 포함한 논리 레코드 길이가 얻어진다.

할당된 DCB 컴포넌트의 레코드 길이 정보가 굳이 필요없는 경우에는 reclen 파라미터에 NULL을 지정한다.

  • 프로토타입

    int tdcb_get_blksize(int handle, int index, int *blksize, int *reclen);
  • 파라미터

    파라미터 설명

    handle (입력)

    tdcb_get_handle() API로 얻은 Allocation Handle이다.

    index (입력)

    순차 연결 순번 또는 베이스 클러스터나 보조 인덱스 지정 번호이다.

    blksize (출력)

    해당 DCB 컴포넌트의 블록 크기를 담을 버퍼이다.

    reclen (출력)

    DCB 컴포넌트의 레코드 길이를 담을 버퍼이다.

  • 반환값

    정상적으로 실행된 경우 0을 반환하고, 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환되며, 상황에 따라 별도의 에러코드를 메시지에 표시한다.

4.5. tdcb_get_key_info()

tdcb_get_handle() API로 찾은 Allocation 정보에서 특정 DCB 컴포넌트의 키 위치와 키 길이 정보를 얻는다. DCB 컴포넌트는 순차 연결이 되어 있는 Non-VSAM Allocation 정보에서의 특정 데이터셋 하나를 의미하거나, VSAM Allocation 정보에서의 베이스 클러스터 또는 보조 인덱스 하나를 의미한다.

할당된 DCB 컴포넌트의 키 정보가 없는 경우에는 (예를 들어 할당된 데이터셋이 Non-VSAM 데이터셋이고 DSORG가 PS이거나 PO인 경우) 키 위치와 키 길이 정보가 모두 0값으로 반환된다.

  • 프로토타입

    int tdcb_get_key_info(int handle, int index, int *keypos, int *keylen);
  • 파라미터

    파라미터 설명

    handle (입력)

    tdcb_get_handle() API로 얻은 Allocation Handle이다.

    index (입력)

    순차 연결 순번 또는 베이스 클러스터나 보조 인덱스 지정 번호이다.

    keypos (출력)

    해당 DCB 컴포넌트의 키 위치를 담을 버퍼이다.

    keylen (출력)

    해당 DCB 컴포넌트의 키 길이를 담을 버퍼이다.

  • 반환값

    정상적으로 실행된 경우 0을 반환하고, 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환되며, 상황에 따라 별도의 에러코드를 메시지에 표시한다.

4.6. tdcb_get_vsamtype()

tdcb_get_handle() API로 찾은 Allocation 정보에서 VSAM DCB 컴포넌트의 VSAM 데이터셋 유형과 AIX 속성을 얻는다. DCB 컴포넌트는 순차 연결이 되어 있는 Non-VSAM Allocation 정보에서의 특정 데이터셋 하나를 의미하거나, VSAM Allocation 정보에서의 베이스 클러스터 또는 보조 인덱스 하나를 의미한다.

VSAM 데이터셋 유형에는 다음과 같은 MACRO가 tdcb.h 헤더 파일에 정의되어 있다.

#define TDCB_VSAM_TYPE_ESDS             0x01    /* ESDS */
#define TDCB_VSAM_TYPE_KSDS             0x02    /* KSDS */
#define TDCB_VSAM_TYPE_RRDS             0x04    /* RRDS */
#define TDCB_VSAM_TYPE_VRDS             0x05    /* VRDS */

AIX 속성이란 tdcb.h 헤더 파일에 정의된 다음과 같은 매크로를 의미한다.

#define TDCB_RGATTR_EAIX                0x01
#define TDCB_RGATTR_KAIX                0x02
#define TDCB_RGATTR_UPGRADE             0x04

위의 각 매크로가 의미하는 바는 다음과 같다.

매크로 설명

TDCB_RGATTR_EAIX

해당 VSAM DCB 컴포넌트는 ESDS에 대한 보조 인덱스이다.

TDCB_RGATTR_KAIX

해당 VSAM DCB 컴포넌트는 KSDS에 대한 보조 인덱스이다.

TDCB_RGATTR_UPGRADE

해당 보조 인덱스 컴포넌트는 UPGRADE 속성을 가지고 있다.

  • 프로토타입

    int tdcb_get_vsamtype(int handle, int index, int *vsamtype, int *rgattr);
  • 파라미터

    파라미터 설명

    handle (입력)

    tdcb_get_handle() API로 얻은 Allocation Handle이다.

    index (입력)

    순차 연결 순번 또는 베이스 클러스터나 보조 인덱스 지정 번호이다.

    vsamtype (출력)

    해당 VSAM DCB 컴포넌트의 VSAM 데이터셋 유형을 담을 버퍼이다.

    rgattr (출력)

    해당 VSAM DCB 컴포넌트의 AIX 속성을 담을 버퍼이다.

  • 반환값

    정상적으로 실행된 경우 0을 반환하고, 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환되며, 상황에 따라 별도의 에러코드를 메시지에 표시한다.

5. Set Attributes

5.1. tdcb_set_lrecl()

tdcb_get_handle() API로 찾은 Allocation 정보에서 특정 DCB 컴포넌트의 논리 레코드 길이를 지정한다. DCB 컴포넌트는 순차 연결이 되어 있는 Non-VSAM Allocation 정보에서의 특정 데이터셋 하나를 의미한다.

tdcb_set_lrecl() API로 논리 레코드 길이를 지정하기 전에 tdcb_get_flags() API를 사용하여 해당 DCB 컴포넌트의 논리 레코드 길이가 카탈로그나 JCL에서 이미 지정되지 않았는지를 확인한다.

가변 길이 Non-VSAM 데이터셋인 경우 레코드 길이는 JCL에서 해당 데이터셋을 할당할 때와 동일하게 RDW를 포함한 논리 레코드 길이를 지정한다.

  • 프로토타입

    int tdcb_set_lrecl(int handle, int index, int lrecl);
  • 파라미터

    파라미터 설명

    handle (입력)

    tdcb_get_handle() API로 얻은 Allocation Handle이다.

    index (입력)

    순차 연결된 Non-VSAM 데이터셋의 순번 또는 0이다.

    lrecl (입력)

    해당 DCB 컴포넌트에 지정할 논리 레코드 길이이다.

  • 반환값

    정상적으로 실행된 경우 0을 반환하고, 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환되며, 상황에 따라 별도의 에러코드를 메시지에 표시한다.

5.2. tdcb_set_recfm()

tdcb_get_handle() API로 찾은 Allocation 정보에서 특정 DCB 컴포넌트의 RECFM 속성을 지정한다. DCB 컴포넌트는 순차 연결이 되어 있는 Non-VSAM Allocation 정보에서의 특정 데이터셋 하나를 의미한다.

tdcb_set_recfm() API로 RECFM 속성을 지정하기 전에 tdcb_get_flags() API를 사용하여 해당 DCB 컴포넌트의 RECFM 속성이 카탈로그나 JCL에서 이미 지정되지 않았는지를 확인하는 것이 좋다.

  • 프로토타입

    int tdcb_set_recfm(int handle, int index, char *recfm);
  • 파라미터

    파라미터 설명

    handle (입력)

    tdcb_get_handle() API로 얻은 Allocation Handle이다.

    index (입력)

    순차 연결된 Non-VSAM 데이터셋의 순번 또는 0이다.

    recfm (입력)

    해당 DCB 컴포넌트에 지정할 RECFM 속성이다.

  • 반환값

    정상적으로 실행된 경우 0을 반환하고, 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환되며, 상황에 따라 별도의 에러코드를 메시지에 표시한다.

5.3. tdcb_set_blksize()

tdcb_get_handle() API로 찾은 Allocation 정보에서 특정 DCB 컴포넌트의 블록 크기를 지정한다. DCB 컴포넌트는 순차 연결이 되어 있는 Non-VSAM Allocation 정보에서의 특정 데이터셋 하나를 의미한다.

tdcb_set_blksize() API로 블록 크기를 지정하기 전에 tdcb_get_flags() API를 사용하여 해당 DCB 컴포넌트의 블록 크기가 카탈로그나 JCL에서 이미 지정되지 않았는지를 확인하는 것이 좋다.

  • 프로토타입

    int tdcb_set_blksize(int handle, int index, int blksize);
  • 파라미터

    파라미터 설명

    handle (입력)

    tdcb_get_handle() API로 얻은 Allocation Handle이다.

    index (입력)

    순차 연결된 Non-VSAM 데이터셋의 순번 또는 0이다.

    blksize (입력)

    해당 DCB 컴포넌트에 지정할 블록 크기이다.

  • 반환값

    정상적으로 실행된 경우 0을 반환하고, 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환되며, 상황에 따라 별도의 에러코드를 메시지에 표시한다.

5.4. tdcb_set_keylen()

tdcb_get_handle() API로 찾은 Allocation 정보에서 특정 DCB 컴포넌트의 키 길이와 키 위치 정보를 지정한다. DCB 컴포넌트는 순차 연결이 되어 있는 Non-VSAM Allocation 정보에서의 특정 데이터셋 하나를 의미한다.

tdcb_set_keylen() API로 키 길이와 키 위치 정보를 지정하기 전에 tdcb_get_flags() API를 사용하여 해당 DCB 컴포넌트의 키 길이가 카탈로그나 JCL에서 이미 지정되지 않았는지를 확인하는 것이 좋다.

  • 프로토타입

    int tdcb_set_keylen(int handle, int index, int keylen, int keyoff);
  • 파라미터

    파라미터 설명

    handle (입력)

    tdcb_get_handle() API로 얻은 Allocation Handle이다.

    index (입력)

    순차 연결된 Non-VSAM 데이터셋의 순번 또는 0이다.

    keylen (입력)

    해당 DCB 컴포넌트에 지정할 키 길이이다.

    keyoff (입력)

    해당 DCB 컴포넌트에 지정할 키 위치이다.

  • 반환값

    정상적으로 실행된 경우 0을 반환하고, 에러가 발생한 경우 에러 메시지와 함께 -1 값이 반환되며, 상황에 따라 별도의 에러코드를 메시지에 표시한다.

6. Dynamic Allocation

6.1. tdcb_allocate()

JCL에 기술하지 않은 데이터셋에 대해 응용 프로그램에서 Allocation을 수행하여 데이터셋을 접근 하는 경우에 이용한다.

tdcb_allocate로 Dynamic Allocate 후 해당 데이터셋에 대한 OPEN 및 기타 I/O를 수행할 수 있다.

  • 프로토타입

    int tdcb_allocate(char *ddname, char *ddparam, int flags);
  • 파라미터

    파라미터 설명

    ddname (입력)

    DD명을 지정한다.

    ddparam (입력)

    DD 속성을 문자열로 지정한다.

    각 속성은 콤마(,) 문자로 구분한다.

    • DSNAME : 데이터셋명을 기술한다. (예: DSNAME=ABC)

    • DISP : disposition status와 정상 종료 DISP, 비정상 종료 DISP를 지정한다. (예: DISP=(NEW,CATLG))

    • DATACLAS : 데이터셋의 DATACLAS를 지정한다. (예: DATACLAS=ACLS)

    • MGMTCLAS : 데이터셋의 MGMTCLAS를 지정한다.

    • STORCLAS : 데이터셋의 STORCLAS를 지정한다.

    • VOL=SER : 볼륨 시리얼 정보를 지정한다. (예: VOL=SER=DEFVOL)

    • SPACE : SPACE 속성을 지정한다. (예: SPACE=(CYL,(1,1),RLSE))

    • DSORG : DSORG 속성을 지정한다. (예: DSORG=PS)

    • RECFM : RECFM 속성을 지정한다.

    • BLKSIZE : BLKSIZE 속성을 지정한다. (예: BLKSIZE=4096)

    • LRECL : LRECL 속성을 지정한다.

    • KEYLEN : KEYLEN 속성을 지정한다.

    • KEYOFF : KEYOFF 속성을 지정한다.

    • DCB : DCB 속성을 지정한다. (예: DCB=(RECFM=FB,LRECL=80))

    flags (입력)

    allocate할 때 옵션을 지정한다.

    • TDCB_ALLOCATE_DEFAULT : 기본 지정 옵션이다.

    • TDCB_ALLOCATE_NOLOCK : LOCK을 잡지 않고자 할 때 사용하는 옵션이다.

    • TDCB_ALLOCATE_NOACHK : 권한 체크를 수행하지 않는 옵션이다.

    • TDCB_ALLOCATE_TEMPORARY : 임시 데이터셋을 지정하는 옵션이다.

    • TDCB_ALLOCATE_DISPACHK : disposition에 대한 권한 체크를 allocate할 때에 미리 수행하는 옵션이다.

    • TDCB_ALLOCATE_UNNAMED_TAPE : 이름을 지정하지 않는 테입 데이터셋을 지정하는 옵션이다.

  • 반환값

    성공적으로 Allocation을 수행한 경우 음수가 아닌 Allocation Handle을 반환하고, 에러가 발생한 경우 에러가 발생한 함수를 메시지로 출력하고, 음수값의 OpenFrame 에러코드를 반환한다. 에러코드는 oferror 명령을 통해 확인할 수 있다.

6.2. tdcb_concatenate()

tdcb_allocate() API로 받은 handle 값을 매개로 데이터셋에 대해 concatenation을 수행한다.

  • 프로토타입

    int tdcb_concatenate(int handle, char *ddparam, int flags);
  • 파라미터

    파라미터 설명

    handle (입력)

    tdcb_allocate() API로부터 반환받은 handle을 지정한다.

    ddparam (입력)

    DD 속성을 문자열로 지정한다.

    각 속성은 콤마(,) 문자로 구분한다.

    • DSNAME : 데이터셋명을 기술한다. (예: DSNAME=ABC)

    • DISP : disposition status와 정상 종료 DISP, 비정상 종료 DISP를 지정한다. (예: DISP=(NEW,CATLG))

    • DATACLAS : 데이터셋의 DATACLAS를 지정한다. (예: DATACLAS=ACLS)

    • MGMTCLAS : 데이터셋의 MGMTCLAS를 지정한다.

    • STORCLAS : 데이터셋의 STORCLAS를 지정한다.

    • VOL=SER : 볼륨 시리얼 정보를 지정한다. (예: VOL=SER=DEFVOL)

    • SPACE : SPACE 속성을 지정한다. (예: SPACE=(CYL,(1,1),RLSE))

    • DSORG : DSORG 속성을 지정한다. (예: DSORG=PS)

    • RECFM : RECFM 속성을 지정한다.

    • BLKSIZE : BLKSIZE 속성을 지정한다. (예: BLKSIZE=4096)

    • LRECL : LRECL 속성을 지정한다.

    • KEYLEN : KEYLEN 속성을 지정한다.

    • KEYOFF : KEYOFF 속성을 지정한다.

    • DCB : DCB 속성을 지정한다. (예: DCB=(RECFM=FB,LRECL=80)

    flags(입력)

    concatenate할 때의 옵션을 지정한다.

    • TDCB_CONCATENATE_DEFAULT : 기본 지정 옵션이다.

    • TDCB_CONCATENATE_NOLOCK : LOCK을 잡지 않고자 할 때 사용한다.

    • TDCB_CONCATENATE_SPOOL : SPOOL 속성을 가질 때 지정한다.

    • TDCB_CONCATENATE_NOACHK : 권한 체크를 수행하지 않는다.

    • TDCB_CONCATENATE_TEMPORARY : 임시 데이터셋을 지정한다.

  • 반환값

    정상적으로 실행된 경우 0을 반환하고, 에러가 발생한 경우 에러가 발생한 함수를 메시지로 출력하고, 음수값의 OpenFrame 에러코드를 반환한다. 에러코드는 oferror 명령을 통해 확인할 수 있다.

6.3. tdcb_unallocate()

tdcb_allocate() API로 Dynamic Allocation한 데이터셋을 unallocate한다. 데이터셋에 대해 Close를 수행한 이후 unallocate를 수행한다.

  • 프로토타입

    int tdcb_unallocate(int handle, int disp, int flags);
  • 파라미터

    파라미터 설명

    handle (입력)

    tdcb_allocate() API로 얻은 Allocation Handle이다.

    disp (입력)

    정상 종료인지 비정상 종료인지를 지정한다.

    • TDCB_UNALLOCATE_DISP_NORMAL : 정상 종료일 때 지정하는 옵션이다.

    • TDCB_UNALLOCATE_DISP_ABNORMAL : 비정상 종료일 때 지정한다.

    flags (입력)

    unallocate할 때 옵션을 지정한다.

    • TDCB_UNALLOCATE_DEFAULT : 기본 지정 옵션이다.

  • 반환값

    정상적으로 실행된 경우 0을 반환하고, 에러가 발생한 경우 에러가 발생한 함수를 메시지로 출력하고, 음수값의 OpenFrame 에러코드를 반환한다. 에러코드는 oferror 명령을 통해 확인할 수 있다.