카탈로그 관리 API
본 부록에서는 카탈로그 관리 API의 인터페이스를 사용하여 카탈로그 항목과 데이터셋을 관리하는 방법에 대해서 기술한다.
1. 개요
OpenFrame에서 제공하는 카탈로그 관리 API의 인터페이스를 사용하여 카탈로그 항목 삭제와 조회 등 카탈로그와 데이터셋에 대한 관리를 할 수 있다.
카탈로그 관리 API를 사용해서 프로그램을 작성하려면 OpenFrame 바이너리와 함께 배포되는 amsu.h 헤더 파일을 사용자 프로그램에 포함해야 하고, 사용자 프로그램을 컴파일할 때 libams.so 라이브러리를 링크해야 한다.
카탈로그 관리 API의 인터페이스는 다음과 같이 분류할 수 있다.
-
Initialization & Finalization
API 설명 카탈로그 관리를 위한 초기화를 수행한다.
카탈로그 관리 종료를 위한 일을 수행한다.
-
Volume Information
API 설명 시스템에 등록된 볼륨의 목록을 가져온다.
시스템에 등록된 기본 볼륨을 가져온다.
특정 볼륨에 대한 디렉터리 경로를 가져온다.
-
Catalog Search
API 설명 임의의 카탈로그 검색순서를 지정한다.
카탈로그에서 특정 항목을 검색한다.
시스템에 등록된 마스터 카탈로그 정보를 가져온다.
특정 데이터셋을 카탈로깅하기 위한 후보 카탈로그를 검색한다.
-
File Path Resolution
API 설명 특정 데이터셋의 이름에 대해 UNIX 파일경로를 가져온다.
특정 데이터셋의 이름에 대해 파일이름을 가져온다.
-
Entry Management
API 설명 카탈로그에 등록된 데이터셋을 삭제한다.
카탈로그에 등록된 항목 정보를 읽어온다.
카탈로그에 등록된 항목과 연관된 목록을 가져온다.
2. Initialization & Finalization
3. Volume Information
3.1. amsu_volume_list()
시스템에 등록된 볼륨의 목록을 가져온다.
-
프로토타입
int amsu_volume_list(int *count, char *volser[]);
-
파라미터
파라미터 설명 count (출력)
volser로 주어진 버퍼의 크기(입력), 등록된 볼륨의 개수이다.
volser (출력)
등록된 볼륨 시리얼을 담기 위한 버퍼이다.
-
반환값
정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러 코드를 반환한다.
4. Catalog Search
4.1. amsu_use_catalogs()
임의의 카탈로그 검색순서를 지정한다.
-
프로토타입
int amsu_use_catalogs(char **cat_names); int amsu_use_catalog(char *cat_name);
-
파라미터
파라미터 설명 cat_names (입력)
카탈로그를 검색할 때 우선적으로 검색할 카탈로그 이름 리스트이다.
cat_name (입력)
카탈로그를 검색할 때 우선적으로 검색할 카탈로그 이름이다.
-
반환값
정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러 코드를 반환한다.
4.2. amsu_search_entries()
카탈로그에서 특정 항목을 검색한다. 카탈로그 검색순서는 아래와 같다.
-
amsu_use_catalogs()에 의해 지정된 카탈로그
-
filter_key에 의해 지정된 Alias 카탈로그
-
앞에서 검색이 되지 않았을 경우 마스터 카탈로그
-
프로토타입
int amsu_search_entries(char *filter_key, char *entry_types, int *count, amsu_result_t *result, int flags);
-
파라미터
파라미터 설명 filter_key
검색할 카탈로그 항목 표현식이다.
(IN : '*', '%' 등의 와일드 카드 문자 포함)
entry_types (입력)
검색할 카탈로그 항목 유형이다. (NULL이면 모두 검색)
count (출력)
result 버퍼의 크기(입력), 검색된 항목 개수이다.
result (출력)
검색된 항목을 담을 버퍼이다.
flags (입력)
카탈로그 검색 옵션이다.
-
반환값
정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러 코드를 반환한다.
-
참고
다음은 카탈로그 항목 유형과 카탈로그 검색 옵션 매크로이다. 카탈로그 항목 유형과 카탈로그 검색 옵션은 ams_user.h 헤더 파일에 정의된 매크로를 참고한다.
매크로 항목 유형 설명 AMSU_ENTRY_TYPE_NONVSAM
'A'
Non-VSAM이다.
AMSU_ENTRY_TYPE_GDG
'B'
세대 데이터 그룹이다.
AMSU_ENTRY_TYPE_CLUSTER
'C'
VSAM 클러스터이다.
AMSU_ENTRY_TYPE_DATA
'D'
데이터 컴포넌트이다.
AMSU_ENTRY_TYPE_AIX
'G'
보조 인덱스이다.
AMSU_ENTRY_TYPE_GDS
'H'
세대 데이터셋이다.
AMSU_ENTRY_TYPE_INDEX
'I'
인덱스 컴포넌트이다.
AMSU_ENTRY_TYPE_PATH
'R'
접근경로이다.
AMSU_ENTRY_TYPE_UCAT
'U'
사용자 카탈로그이다.
AMSU_ENTRY_TYPE_ALIAS
'X'
Alias이다.
다음은 카탈로그 검색 옵션 매크로이다.
매크로 검색 옵션 설명 AMSU_SEARCH_DEFAULT
0x00
기본 검색 옵션이다.
AMSU_SEARCH_CLS_COMPS
0x01
클러스터 이름이 filter key와 일치하면 컴포넌트가 반환된다.
AMSU_SEARCH_1_CATALOG
0x02
단 하나의 카탈로그만 검색된다.
카탈로그를 검색해서 나온 결과는 다음과 같은 구조체에 담기게 된다.
/* -------------------------- catalog search result -------------------- */ typedef struct _amsu_result_t { char catname[AMSU_ENTRY_NAME_LENGTH+1]; char entname[AMSU_ENTRY_NAME_LENGTH+1]; char enttype; } amsu_result_t;
-
4.3. amsu_master_catalog()
시스템에 등록된 마스터 카탈로그 정보를 가져온다.
-
프로토타입
int amsu_master_catalog(char *mascat_name, char *mascat_vser);
-
파라미터
파라미터 설명 mascat_name (출력)
마스터 카탈로그 데이터셋 이름을 담을 버퍼이다.
mascat_vser (출력)
마스터 카탈로그 볼륨 시리얼을 담을 버퍼이다.
-
반환값
정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러 코드를 반환한다.
4.4. amsu_candidate_catalog()
특정 데이터셋에 대한 후보 카탈로그를 검색한다.
후보 카탈로그는 다음의 절차에 의해서 결정된다.
-
데이터셋 이름이 GDS인 경우 GDG 카탈로그
-
amsu_use_catalogs()로 지정된 카탈로그
-
데이터셋 이름에 의해서 지정된 Alias 카탈로그
-
앞에서 결정이 되지 않았을 경우 마스터 카탈로그
-
프로토타입
int amsu_candidate_catalog(char *dsname, char *cat_name);
-
파라미터
파라미터 설명 dsname (입력)
카탈로깅될 데이터셋 이름이다.
cat_name (출력)
후보 카탈로그 이름을 담을 버퍼이다.
-
반환값
정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러 코드를 반환한다.
-
5. File Path Resolution
5.1. amsu_filepath2()
특정 데이터셋의 이름에 대해 파일 경로를 가져온다.
-
프로토타입
int amsu_filepath(char *dsname, char *volser, char *filepath); int amsu_filepath2(char *dsname, char *membname, char *volser, char *filepath);
-
파라미터
파라미터 설명 dsname (입력)
파일 경로를 조회하고자 하는 데이터셋 이름이다.
membname (입력)
파일 경로를 조회하고자 하는 PDS의 멤버이다.
volser (입력)
지정된 데이터셋이 저장된 볼륨 시리얼이다.
filepath (출력)
UNIX 파일 경로를 담을 버퍼이다.
-
반환값
정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러 코드를 반환한다.
5.2. amsu_filename2()
특정 데이터셋의 이름에 대해 파일 이름을 가져온다.
-
프로토타입
int amsu_filename(char *dsname, char *filename); int amsu_filename2(char *dsname, char *membname, char *filename);
-
파라미터
파라미터 설명 dsname (입력)
파일 경로를 조회하고자 하는 데이터셋 이름이다.
membname (입력)
파일 경로를 조회하고자 하는 PDS의 멤버이다.
filename (출력)
UNIX 파일 이름을 담을 버퍼이다.
-
반환값
정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러 코드를 반환한다.
6. Entry Management
6.1. amsu_delete()
카탈로그에 등록된 항목을 삭제한다.
-
프로토타입
int amsu_delete(char *cat_name, char *entry_name, char entry_type, int flags);
-
파라미터
파라미터 설명 cat_name (입력)
해당 항목이 카탈로깅된 카탈로그 이름이다.
entry_name (입력)
해당 항목의 카탈로깅된 이름이다.
entry_type (입력)
해당 항목이 카탈로깅된 유형이다.
flags (입력)
카탈로그 삭제 옵션이다.
-
반환값
정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러 코드를 반환한다.
6.2. amsu_info()
카탈로그에 등록된 항목에 대한 정보를 읽어온다.
-
프로토타입
int amsu_info(char *cat_name, char *entry_name, char entry_type, void *entry_info, int flags);
-
파라미터
파라미터 설명 cat_name (입력)
해당 항목이 카탈로깅된 카탈로그 이름이다.
entry_name (입력)
해당 항목의 카탈로깅된 이름이다.
entry_type (입력)
해당 항목이 카탈로깅된 유형이다.
flags (입력)
카탈로그 삭제 옵션이다.
-
반환값
정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러 코드를 반환한다.
-
참고
카탈로그 항목에 대한 정보는 항목의 유형에 따라 서로 다른 구조체에 담기게 된다. 아래는 GDG 항목에 대한 정보 구조체를 보여준다.
/* -------------------------- GDG info type ---------------------------- */ typedef struct _amsu_gdg_info_t { char dscrdt2[8]; /* creation date */ char dsexdt2[8]; /* expiration date */ char ownerid[8]; /* owner of the data set */ int16_t gdglimit; /* maximum number of GDS allowed */ uint8_t gdgattr; /* GDG attributes - bit flags */ } amsu_gdg_info_t;
GDG 이외의 항목에 대해서는 ams_user.h 헤더 파일에 정의된 구조체를 참고한다.
6.3. amsu_assoc()
카탈로그에 등록된 항목과 연관된 항목 목록을 가져온다.
-
프로토타입
int amsu_assoc(char *cat_name, char *entry_name, char entry_type, int *count, amsu_symbol_t *assocs);
-
파라미터
파라미터 설명 cat_name (입력)
해당 항목이 카탈로깅된 카탈로그 이름이다.
entry_name (입력)
해당 항목의 카탈로깅된 이름이다.
entry_type (입력)
해당 항목이 카탈로깅된 유형이다.
count (출력)
연관된 항목 버퍼 크기(입력), 연관된 항목 개수이다.
assoc (출력)
연관된 항목 버퍼이다.
-
반환값
정상적으로 실행된 경우 0을 반환하고 에러가 발생한 경우 음수의 에러 코드를 반환한다.
-
참고
연관된 항목 목록은 다음과 같은 구조체에 담기게 된다.
/* -------------------------- catalog entry symbol --------------------- */ typedef struct _amsu_symbol_t { char entname[AMSU_ENTRY_NAME_LENGTH+1]; char enttype; } amsu_symbol_t;