파일 I/O을 위한 resourceAssociation 변수

프로그램이 I/O 조작에서 레코드를 사용하는 경우, EGL은 레코드 특정 recordName.resourceAssociation 변수에 레코드를 보유하는 물리적 파일의 이름이 포함된 것으로 간주합니다(해당 변수가 특정 파일 유형을 지원하는 경우).

EGL은 생성 시간에 사용되는 ResourceAssociation 파트에 따라 변수를 초기화합니다. 자세한 정보는 자원 연관 파트의 내용을 참조하십시오. recordName.resourceAssociation 변수에 다른 값을 배치하여 런타임에 I/O 조작의 오브젝트를 변경할 수 있습니다.

대부분의 경우 recordName.resourceAssociation 구문을 사용해야 합니다. 다음 각 경우와 같이 EGL이 사용자가 의도한 레코드를 판별할 수 있는 경우에는 recordName 부분을 지정할 필요가 없습니다.

resourceAssociation에는 다음과 같은 특성이 있습니다.
기본 유형
CHAR
데이터 길이
Java™ 생성 및 디버그를 위해 300자, COBOL 생성을 위해 65자
세그먼트 간에 저장 여부

정의 고려사항

recordName.resourceAssociation으로 이동하는 값은 프로그램이 생성될 때 사용자가 지정한 시스템 및 파일 유형의 유효 시스템 자원 이름이어야 합니다. 둘 이상의 레코드가 동일한 파일 이름을 지정하는 경우 그 파일 이름의 레코드에 대해 resourceAssociation을 수정하면 resourceAssociation의 값은 프로그램에서 동일한 파일 이름의 모든 레코드에 대해 변경됩니다.

resourceAssociation에서 식별된 시스템 자원은 다음과 같은 상황에 닫힙니다.
  • resourceAssociation을 규정하는 레코드와 동일한 EGL 파일 이름의 레코드에 대해 I/O 옵션이 실행되는 경우
  • 레코드 변수가 변경되는 경우

resourceAssociation의 현재 설정과 연관된 파일을 닫으려면 close 문을 사용하십시오. 실행 단위가 종료되거나 세그먼트된 converse가 발생할 때 EGL은 열려 있는 모든 파일을 자동으로 닫습니다.

COBOL 환경의 경우 EGL은 resourceAssociation의 컨텐츠를 사용하여 파일에 액세스하기 전에 해당 컨텐츠를 대문자로 폴드합니다. 그러나 resourceAssociation에 배치한 값은 비교 용도를 위해 변경되지 않은 채로 남아 있습니다.

프로그램 간에 공유되는 파일

여러 프로그램이 시스템 자원을 공유하는 경우, 각 프로그램은 동일한 자원을 참조하도록 resourceAssociation을 설정해야 합니다. 동일한 실행 단위의 두 프로그램이 동일한 논리 파일에 액세스하는 경우, 각 프로그램은 생성 시에 resourceAssociation을 동일한 시스템 자원 이름에 설정하여 두 프로그램이 런타임에 동일한 시스템 자원에 액세스하도록 해야 합니다.

두 프로그램이 동일한 EGL 파일 이름을 사용하는 경우, 각 레코드 특정 resourceAssociation 변수는 동일한 값을 포함해야 합니다. 그렇지 않으면 새 시스템 자원이 열릴 때 이전에 열린 시스템 자원이 닫힙니다.

두 프로그램이 동일한 값을 사용하도록 하려면 생성 시 또는 런타임에 시스템 자원 이름을 설정하십시오.
생성 시
동일한 실행 단위의 두 프로그램이 동일한 논리 파일에 액세스하는 경우, 생성 시 논리 파일에 동일한 시스템 지원 이름을 지정하여 두 프로그램이 런타임에 동일한 실제 파일에 액세스하도록 하십시오.
런타임에
recordName.resourceAssociation을 사용하는 경우 파일에 액세스하는 각 프로그램은 파일에 대해 resourceAssociation을 설정해야 합니다. 동일한 실행 단위의 두 프로그램이 동일한 논리 파일에 액세스하는 경우, 각 프로그램이 resourceAssociation을 동일한 시스템 자원 이름에 설정하여 두 프로그램이 런타임에 동일한 실제 파일에 액세스하도록 해야 합니다.

WebSphere MQ 레코드

WebSphere® MQ 레코드의 시스템 자원 이름은 큐 관리자 이름과 큐 이름을 정의합니다. 다음 형식으로 이름을 지정하십시오.

  queueManagerName:queueName
queueManagerName
큐 관리자의 이름
queueName
큐의 이름

표시된 것처럼, 이름은 콜론으로 분리됩니다. 그러나 queueManagerName과 콜론은 생략할 수 있습니다. 시스템 자원 이름은 레코드 특정 resourceAssociation 필드의 초기값이며, 레코드와 연관된 기본 큐를 식별합니다. 자세한 정보는 WebSphere MQ 메시지 큐 액세스의 내용을 참조하십시오.

호환성

플랫폼 문제
z/OS®용 CICS®
SPOOL
값은 직렬 파일과 연관된 JES SPOOL 파일의 입력 또는 출력 파일 이름입니다.
입력 파일 이름: userid.class. userid 매개변수는 4 - 8자의 외부 기록기 이름 또는 별표(*)입니다. 외부 기록기 이름을 사용하는 경우, CICS에서 외부 기록기 이름의 첫 네 문자가 CICS 리젼을 ACF/VTAM으로 식별하는 CICS APPLID의 첫 네 문자와 동일해야 합니다. class 매개변수는 단일 문자의 스풀 클래스입니다. class는 선택사항이며 기본값은 "A"입니다. 최대 이름 크기는 10바이트입니다. 자세한 정보는 CICS 사용자 정의 매뉴얼을 참조하십시오.
출력 파일 이름: nodeid.userid.class. nodeid 매개변수는 1 - 8자의 시스템 노드 ID 또는 별표(*)입니다. userID 매개변수는 1 - 8자의 시스템 사용자 ID 또는 별표(*)입니다. class 매개변수는 단일 문자의 스풀 클래스입니다. class는 선택사항이며 기본값은 "A"입니다. class가 지정되지 않은 경우 userid는 선택사항이며 기본값은 CICS 사용자 ID(sysVar.usrID에 저장된 값)입니다. 최대 이름 크기는 19바이트입니다. 자세한 정보는 CICS 사용자 정의 매뉴얼을 참조하십시오.
TEMPMAIN
값은 상대 파일 또는 직렬 파일과 연관된 기본 임시 스토리지 큐의 8바이트 큐 이름입니다. 일부 큐 이름은 EGL의 사용을 위해 예약되며 접두부 "EZE"가 사용됩니다.
임시 스토리지 큐 이름이 레코드 특정 변수 recordName.resourceAssociation으로 이동하는 경우, 큐가 아직 존재하지 않으면 큐가 동적으로 작성됩니다. 동시에 여러 사용자가 단일 임시 스토리지 큐 파일을 공유할 수 없습니다. CICS ENQ는 프로그램에서 파일을 처음 참조할 때 해당 파일에 대한 액세스를 직렬화합니다. 프로그램이 파일을 닫을 때 DEQ가 실행됩니다.
TEMPAUX
TEMPAUX는 보조 임시 스토리지 큐에 사용된다는 점을 제외하면 TEMPMAIN과 유사합니다.
TRANSIENT
직렬 파일과 연관된 임시 데이터 큐의 4바이트 DCT 이름입니다. 임시 데이터 큐 이름은 CICS에 정의되어야 합니다.
VSAM
색인화, 상대 또는 직렬 파일과 연관된 VSAM 파일의 8바이트 FCT 이름입니다.
IMS™ BMP IMS BMP는 z/OS 일괄처리에 대해 지원되는 것 외에 IMS/VS에 대해 지원되는 것과 동일한 파일 유형도 지원합니다.
IMS/VS
MMSGQ
출력에 대해서만 지원됩니다. 값(8바이트 논리 터미널 이름 또는 트랜잭션 코드)이 IMS 시스템에 정의되고 다중 세그먼트 메시지를 승인하는 메시지 큐와 연관됩니다. 생성 시 사용되는 ResourceAssociation 파트에서 파일 이름은 수정 가능한 대체 PCB 또는 수정 가능한 표현 대체 PCB와 연관됩니다.
resourceAssociation의 값은 대문자로 변환되지 않습니다.
SMSGQ
출력에 대해서만 지원됩니다. 값(8바이트 논리 터미널 이름 또는 트랜잭션 코드)이 IMS 시스템에 정의되고 단일 세그먼트 메시지를 승인하는 메시지 큐와 연관됩니다. 생성 시 사용되는 ResourceAssociation 파트에서 파일 이름은 수정 가능한 대체 PCB 또는 수정 가능한 표현 대체 PCB와 연관됩니다.
resourceAssociation의 값은 대문자로 변환되지 않습니다.
iSeries COBOL fileTypeseq(순차) 또는 vsam이어야 합니다. 다음 방법 중 하나를 사용하여 값을 resourceAssociation으로 이동할 수 있습니다.
LIB/FILE MEMBER
라이브러리, 파일 및 멤버를 명시적으로 지정합니다.
LIB/FILE
파일의 첫 번째 멤버가 사용됩니다.
FILE MEMBER
*LIBL을 사용하여 파일을 찾습니다.
FILE
*LIBL을 사용하여 파일을 찾고 해당 파일의 첫 번째 멤버를 사용합니다.
resourceAssociation의 값을 수정하는 경우 iSeries OVRDBF 명령은 다음과 같은 방식으로 작동합니다.
  1. 이전 파일을 닫습니다.
  2. 새 값으로 대체합니다.
  3. 새 파일을 엽니다.

resourceAssociation에 설정된 값은 호출 레벨에서 전파되며 모든 하위 호출 레벨로 변경됩니다. 프로그램에서 이전에 파일을 연 경우에는 값이 전파되지 않습니다.

MQSeries

WebSphere MQ 레코드의 시스템 자원 이름은 큐 관리자 이름과 큐 이름을 정의합니다. 다음 형식을 사용하여 이름을 지정하십시오.

  queueManagerName:queueName
queueManagerName
큐 관리자의 이름입니다.
queueName
큐의 이름입니다.

표시된 것처럼, 이름은 콜론으로 분리됩니다. 그러나 queueManagerName과 콜론은 생략할 수 있습니다. 시스템 자원 이름은 레코드 특정 resourceAssociation 필드의 초기값으로 사용되며 레코드와 연관된 기본 큐를 식별합니다.

z/OS 일괄처리
GSAM
지원되지 않습니다.
SEQ
지원되지 않습니다.
SEQRS
값은 직렬 파일과 연관된 시스템 순차 파일의 54바이트 데이터 세트 이름 또는 8바이트 DD 이름입니다. 파일의 resourceAssociation에 대해 값이 설정되지 않은 경우, 프로그램은 우선 논리적 파일 이름을 DD 이름으로 사용하여 사전 할당된 데이터 세트를 검사합니다. 그렇지 않으면 EGL은 생성 시 파일에 액세스하기 위해 사용자가 지정한 시스템 자원 이름을 사용합니다. 데이터 세트 이름을 resourceAssociation으로 이동한 경우, 자원은 MVS™ 수퍼바이저 호출(SVC99)을 사용하여 동적으로 관련 레코드 파일 이름에 할당됩니다. 할당은 SHR로 설정된 DISP 옵션으로 수행되므로 데이터 세트는 출력을 위해 열릴 때마다 다시 쓰여집니다.
VSAM
지원되지 않습니다.
VSAMRS
값은 색인화, 상대 또는 직렬 파일과 연관된 VSAM 파일의 44바이트 데이터 세트 이름 또는 8바이트 DD 이름입니다. 파일의 resourceAssociation에 대해 값이 설정되지 않은 경우, 프로그램은 논리적 파일 이름을 DD 이름으로 사용하여 사전 할당된 데이터 세트를 검사합니다. 그렇지 않으면 EGL은 생성 시 파일에 액세스하기 위해 사용자가 지정한 시스템 자원 이름을 사용합니다. 데이터 세트 이름을 resourceAssociation으로 이동한 경우, 자원은 MVS 수퍼바이저 호출(SVC99)을 사용하여 동적으로 관련 레코드 파일 이름에 할당됩니다. 할당은 SHR로 설정된 DISP 옵션으로 수행되므로 데이터 세트는 출력을 위해 열릴 때마다 쓰여집니다.

예제

다음 예제는 resourceAssociation 변수에 대한 파일 지정을 보여줍니다.

  if (process == 1)
    myrec.resourceAssociation = "myFile.txt";
  else
    myrec.resourceAssociation = "myFile02.txt";
  end