파일, 디렉토리, 장치 또는 대기열 같은 시스템 객체를 나타내는 다른 이름 대신에 논리 이름을 사용할 수 있습니다. 예를 들어,
기본 디스크와 디렉토리에 논리 이름을 할당할 수 있습니다. 논리 이름은 가독성과 파일 독립성을 높이는 두 가지 주요한 기능을 합니다.
짧고 의미있는 논리 이름을 사용하여 일반적으로 사용되는 파일, 디렉토리 및 장치를 정의할 수 있습니다. 이러한 이름은 전체 파일 지정 방법보다 더 쉽게 기억하고 입력할 수 있습니다. 로그인 명령 프로시저에서 자주 사용하는 이름을 정의할 수 있습니다. 시스템 관리자는 시스템 시작 명령 프로시저에서 사람들이 자주 사용하는 이름을 정의할 수 있습니다.
프로그램 및 명령 프로시저를 물리적 파일 지정 방법에 관계 없이 보관하기 위해 논리 이름을 사용할 수 있습니다. 예를 들어, 명령 프로시저에서 논리 이름 ACCOUNTS를 참조하면 ACCOUNTS를 임의의 디스크의 모든 파일과 일치시킬 수 있습니다. 이 장에는 다음 정보가 포함되어 있습니다.
이 장에서 설명하는 명령에 대한 자세한 내용은
OpenVMS DCL Dictionary 또는 온라인 도움말을 참조하십시오.
문자열(등가 문자열 또는 등가 이름이라고 함) 또는 등가 문자열 목록(검색 목록이라고 함)과 일치합니다. 논리 이름을 사용하면 등가 문자열로 논리 이름을 대체합니다.
사용자가 만든 기본 논리 이름 표나 논리 이름 표에 저장됩니다.
사용자가 정의하거나 시스템에서 정의할 수 있습니다.
물리적 파일 지정 방법에 관계 없이 프로그램 및 명령 프로시저를 보관하는 데 사용할 수 있습니다. 예를 들어, 명령 프로시저에서 논리 이름 ACCOUNTS를 참조하면 명령 프로시저를 실행하기 전에 임의의 디스크의 모든 파일에 ACCOUNTS를 일치시킬 수 있습니다.
일반적으로 명령에서 시스템 객체를 받아들이면 이 명령은 사용자가 제공한 이름이 논리 이름인지 확인합니다. 이 이름이 논리 이름인 경우 시스템에서는 논리 이름을 실제 값으로 바꾼 다음 명령을 실행합니다.
다음 보기에서는 DISK7:[WALSH.COMMAND_PROC] 디렉토리를 나타내기 위해 논리 이름 COMS를 만듭니다.
$ DEFINE COMS DISK7:[WALSH.COMMAND_PROC]
그런 다음 보기에서와 같이 논리 이름 COMS를 DCL 명령에서 사용할 수 있습니다.
시스템에서는 사용자가 시스템을 시작하고 로그인하면 일련의 시스템 논리 이름을 만듭니다. 이러한 논리 이름을 사용하면 물리적 장치 이름을 사용하지 않고 일반적으로 사용되는 파일이나 장치를 참조할 수 있습니다. 이러한 이름의 목록에 대해서는
시스템 논리 이름 디렉토리를 참조하십시오.
로그인할 때마다 시스템에서는 프로세스에 대한 논리 이름 그룹을 만들어 이러한 이름을 사용자 프로세스 표에 놓습니다. 이러한 이름 목록은
프로세스 논리 이름 디렉토리를 참조하십시오.
운영 체제의 프로그램을 나열하기 위해서 이러한 프로그램이 저장되어 있는 디스크 및 디렉토리 이름을 알 필요는 없습니다. 대신 다음과 같이 논리 이름 SYS$SYSTEM을 사용할 수 있습니다.
논리 이름 SYS$LOGIN은 사용자가 로그인할 때 사용자 기본 장치 및 디렉토리를 참조합니다. SET DEFAULT 명령을 사용하여 현재 기본값을 변경한 경우 다음 명령을 사용하여 초기 기본 디렉토리의 파일을 표시할 수 있습니다.
$ TYPE SYS$LOGIN:DAILY_NOTES.DAT
DEFINE 명령이나 ASSIGN 명령 중 하나를 사용하여 논리 이름을 만들 수 있습니다. 이 장에서는 DEFINE 명령이 보기에 사용되었습니다.
일반적으로 프로세스 표에 논리 이름을 만들며 로그인할 때마다 논리 이름을 사용할 수 있도록 로그인 명령 프로시저(LOGIN.COM)에 논리 이름을 정의합니다. 또한, 대화형으로 논리 이름을 만들 수도 있습니다. 하지만 현재 프로세스가 활성화된 경우에만 이러한 논리 이름을 사용할 수 있습니다.
사용자가 프로세스 표에 만든 논리 이름은 다른 사용자 프로세스에서는 사용할 수 없습니다. 시스템 관리자나 다른 특권이 있는 사용자는 다른 사용자가 액세스할 수 있는 공유 표에 이름을 만들 수 있습니다. 그룹 및 시스템 표는 공유 표에 대한 보기입니다.
DEFINE 명령을 사용하여 논리 이름을 정의하는 형식은 다음과 같습니다.
DEFINE logical-name equivalence-string[,...]
같은 형식을 사용하여 노드 이름, 파일 지정 방법, 장치 이름, 어플리케이션 특유의 정보 또는 기타 논리 이름에 대한 논리 이름을 만들 수 있습니다.
기본적으로 DEFINE 명령은 프로세스 논리 이름 표에 논리 이름을 놓습니다(
논리 이름 표 특성 참조). 여기서 논리 이름은 사용자 프로세스 및 하위 프로세스에서만 사용할 수 있습니다. 논리 이름을 다른 논리 이름 표에 추가하려면 /JOB, /GROUP, /SYSTEM 또는 /TABLE=
table_name 한정자 중 하나를 사용하여 다른 표를 지정할 수 있습니다. 처음 세 개의 한정자는 기본 작업, 그룹 및 시스템 논리 이름 표를 각각 지정합니다. /TABLE=
table_name은 표 유형을 지정하는 데 사용할 수 있으며 클러스터 전체 표를 지정하는 데 사용할 수 있는 유일한 한정자입니다.
다음 보기에서 해당 명령은 논리 이름 WORKFILE을 만들어 이 이름을 등가 문자열 DISK2:[WALSH.REPORTS]WORK_SUMMARY.DAT와 일치시킵니다.
$ DEFINE WORKFILE DISK2:[WALSH.REPORTS]WORK_SUMMARY.DAT
WORKFILE을 논리 이름으로 정의한 다음 논리 이름을 등가 문자열과 교대로 사용할 수 있습니다.
다음 보기에서 해당 명령은 인쇄 대기열 BLDGC_LPS20_ANSI에 대해 논리 이름 MY_Q를 만듭니다.
$ DEFINE MY_Q BLDGC_LPS20_ANSI
그리고 다음 명령을 사용하여 FABLES.TXT 파일을 BLDGC_LPS20_ANSI 인쇄 대기열로 인쇄할 수 있습니다.
$ PRINT/QUEUE=MY_Q FABLES.TXT
다음 보기는 /TABLE=
table_name 한정자를 사용하여 프로세스 논리 이름 표가 아닌 표에 논리 이름을 만드는 것을 보여 줍니다. LNM$SYSCLUSTER를 지정하면 논리 이름은 기본 클러스터 전체 표, LNM$SYSCLUSTER_TABLE에 놓이므로 클러스터의 모든 사용자가 액세스할 수 있습니다.
$ DEFINE/TABLE=LNM$SYSCLUSTER CUSTOMERS
DISK1:[CUSTOMER_VISITS]CUSTOMERS.TXT
파일 I/O용 명령 프로시저에 논리 이름 만들기
명령 프로시저에서 논리 이름을 사용하여 파일 I/O(입력 및 출력)를 수행할 수 있습니다. OPEN 명령을 사용하여 파일을 열면 이 파일의 논리 이름도 만들 수 있습니다. 후속 READ, WRITE 및 CLOSE 명령에서는 실제 파일 지정 방법 대신 논리 이름을 사용하여 파일을 참조할 수 있습니다.
다음 보기에서 OPEN 명령은 논리 이름 INFILE을 만들고 CLOSE 명령은 이 이름을 삭제합니다.
$ OPEN INFILE DISK3:[WALSH]DATA.DAT
$ READ INFILE RECORD
$ CLOSE INFILE
DEFINE 명령을 사용하여 논리 이름을 만드는 경우 다음 규칙을 따르십시오.
등가 문자열과 논리 이름을 각각 255자 이내로 제한합니다. 논리 이름에는 영문자 및 숫자, 밑줄(_), 달러 기호($) 및 하이픈(-)이 포함될 수 있습니다.
등가 문자열을 지정하는 경우 파일 지정 방법에 필요한 구두점(콜론, 대괄호, 마침표)을 포함합니다. 예를 들어, 장치 이름은 콜론으로 끝나고 디렉토리 지정 방법은 대괄호로 묶고 파일 유형 앞에는 마침표가 와야 합니다.
논리 이름이 파일 지정 방법의 일부만 나타내는 경우 콜론을 사용하여 해당 이름을 파일 지정 방법의 다른 부분과 구분합니다. 완전한 파일 지정 방법을 나타내는 데 논리 이름을 사용하는 경우 종결 콜론이 필요하지 않습니다.
또한, 논리 이름은 파일 지정 방법의 가장 왼쪽 구성 요소여야 합니다.
ASSIGN 명령은 논리 이름을 논리 이름 표에 놓기 전에 콜론을 제거하고 DEFINE 명령은 콜론을 논리 이름의 일부로 저장합니다.
논리 이름을 한 개의 등가 문자열에 일치시키는 경우 같은 논리 이름을 다른 등가 문자열에 일치시킵니다. 각 정의를 다른
논리 이름 표에 정의하거나 다른 액세스 모드로 정의하지 않는 한, 두 번째 정의는 첫 번째 정의에 우선합니다.
다음 명령은 DISK1:[SALES_STAFF]PAYROLL.DAT 파일을 표시합니다.
$ DEFINE PAY DISK1:[SALES_STAFF]PAYROLL.DAT
$ TYPE PAY
$ DEFINE PAY_FILE DISK1:[SALES_STAFF]PAYROLL
$ TYPE PAY_FILE:*.DAT
$ DEFINE PAY_DIR DISK1:[SALES_STAFF]
$ TYPE PAY_DIR:PAYROLL.DAT
$ DEFINE PAY_DISK DISK1:
$ TYPE PAY_DISK:[SALES_STAFF]PAYROLL.DAT
논리 이름을 만들면 시스템의 등가 문자열 해석 방법을 수정하는 변환 속성을 지정할 수 있습니다.
변환 속성을 등가 문자열에 적용하려면 /TRANSLATION_ATTRIBUTES 한정자를 DEFINE 명령에 사용합니다. 이 한정자는 위치 한정자입니다. 이 한정자를 명령행에 놓는 위치에 따라 변환 속성을 모든 등가 문자열에 적용하거나 특정 등가 문자열에만 적용할 수 있습니다.
다음 보기에서 장치 이름 DJA3는 논리 이름 DISK와 함께 숨겨집니다.
$ DEFINE/TRANSLATION_ATTRIBUTES=CONCEALED DISK DJA3:
$ SHOW DEFAULT
DISK:[SAM.PUP]
$ SHOW LOGICAL DISK
"DISK" = "DJA3" (LNM$PROCESS_TABLE)
논리 이름 DISK는 물리적 장치 DJA3를 나타냅니다. 따라서 SHOW DEFAULT 명령은 물리적 장치 이름 DJA3가 아닌 논리 이름 DISK를 표시합니다. SHOW LOGICAL 명령은 DISK의 변환을 표시합니다.
CONCEALED 속성은 시스템 메시지가 장치의 물리적 이름이 아닌 논리 이름을 표시하게 합니다. 일반적으로 CONCEALED 속성을 물리적 장치를 나타내는 논리 이름과 함께 사용합니다. 숨겨진 장치를 사용하면 디스크나 테이프를 보관하는 물리적 장치가 어떤 것인지에 대한 고려를 하지 않고 프로그램을 작성하고 명령 프로시저를 쓸 수 있으며 기타 작업을 수행할 수 있습니다. 또한, 물리적 장치 이름보다 더 의미있는 이름을 사용할 수 있습니다.
TERMINAL 속성은 논리 이름을 반복적으로 변환하는 것을 방지합니다. 즉, 등가 문자열이 논리 이름인지 확인하기 위해 검사하지 않습니다. 첫 번째 변환 이후의 변환은
“terminal
”
(마지막이거나 완료됨)입니다.
OpenVMS 운영 체제에는 다음 네 가지 액세스 모드가 있습니다.
사용자 모드(가장 바깥쪽 및 최소 특권 모드)
DCL 명령 DEFINE이나 ASSIGN을 사용하여 처음 세 개의 모드(사용자, 감독자 및 실행)에서 논리 이름을 만들 수 있습니다. 각 논리 이름 정의에 대한 다른 액세스 모드를 지정하면 같은 논리 이름을 같은 논리 이름 표의 다른 등가 문자열과 일치시킬 수 있습니다. 모든 논리 이름 표에서 실행 모드로 논리 이름을 만들려면 SYSNAM이나 SYSPRV 특권이 있어야 합니다.
사용자 모드에서 만든 논리 이름은 임시적입니다. 다음 명령이나 이미지를 실행하는 동안만 논리 이름을 사용하려는 경우 사용자 모드에서 논리 이름을 정의하십시오.
다음 보기에서 논리 이름 ADDRESSES는 프로그램 PAYABLE을 실행한 후 자동으로 삭제됩니다.
$ DEFINE/USER_MODE ADDRESSES DISK1:[SAM.ACCOUNTS]OVERDUE.LIS
$ RUN PAYABLE
모드를 지정하지 않고 DEFINE 명령을 사용하는 경우 DCL에서는 감독자 모드에서 논리 이름을 만듭니다.
다음 보기에서 명령은 논리 이름 ACCOUNTS를 프로세스 논리 이름 표에 있는 두 개의 다른 등가 문자열(하나는 감독자 모드, 다른 하나는 실행 모드)에 일치시킵니다.
$ DEFINE ACCOUNTS DISK1:[ACCOUNTS]CURRENT.DAT
$ DEFINE/EXECUTIVE_MODE ACCOUNTS DISK1:[JANE.ACCOUNTS]OBSOLETE.DAT
논리 이름을 조회할 때 LOGINOUT과 같은 모든 특권있는 이미지와 유틸리티는 사용자 모드와 감독자 모드 이름 및 표를 통과합니다. 논리 이름을 유틸리티를 비롯한 특권있는 이미지에서 사용하려는 경우 실행 또는 커널 모드 표의 실행 또는 커널 모드에서 정의되어야 합니다. 실행 모드에 정의되어 있는 논리 이름의 다른 후보는 인쇄 대기열 및 시스템 디스크 같은 사용자 작업 그룹과 시스템 리소스에서 사용하는 공용 디렉토리의 이름입니다.
운영 체제와 특권있는 프로그램만 커널 모드에서 논리 이름을 만들 수 있습니다.
네트워크 노드 이름 대신 또는 노드 이름 및 액세스 제어 문자열 대신 논리 노드 이름을 사용할 수 있습니다. 한 번 논리 노드 이름을 정의하면 화면에서 사용자 이름 및 암호를 입력하고 표시하는 것을 방지하는 데 이 이름을 사용할 수 있습니다.
논리 노드 이름을 정의하려면 다음 규칙을 따르십시오.
등가 문자열을 이중 콜론(::)으로 끝내고 인용 부호(
”)로 묶습니다.
액세스 제어 문자열에 인용 부호가 나타나게 하려면 두 개의 인용 부호( ) 집합을 사용합니다.
1-255자를 포함하는 논리 이름을 지정합니다.
주) 암호를 포함하는 DEFINE 명령을 파일(예: 사용자 로그인 명령 프로시저)에 넣지 마십시오. 다른 사용자가 파일을 읽으면 암호를 보게 됩니다.
다음 보기에서 해당 명령은 논리 이름 BOS를 노드 이름 BOSTON과 액세스 제어 문자열에 일치시킵니다. 여기서 ADAMS는 사용자 이름이고 OLMEKIKA는 암호입니다.
$ DEFINE BOS "BOSTON""ADAMS OLMEKIKA""::"
파일 지정 방법은 논리 노드 이름(시스템이 로컬 노드에서 변환하는 대상)과 논리 장치 이름(시스템이 원격 노드에서 변환하는 대상)을 모두 포함할 수 있습니다. 노드 이름만 나타내기 위해 논리 이름을 사용하려면 파일 지정 방법의 노드 위치에서 논리 이름을 사용할 때 이중 콜론(::)을 포함해야 합니다.
시스템에서 논리 노드 이름을 로컬 노드에서 변환한 다음 형식이 올바른지 결정하기 위해 파일 지정 방법의 나머지 부분을 구문 분석합니다.
다음 보기에서 시스템은 로컬 노드에서 논리 노드 이름 NYC를 변환하고 원격 노드(NEWYRK)에서 논리 장치 이름(DOC:)을변환합니다.
$ DEFINE NYC NEWYRK::
$ TYPE NYC::DOC:[PERKINS]TERM_PAPER.DAT
논리 노드 이름에서 액세스 제어 문자열을 무시하려면 명령행에서 논리 이름과 액세스 제어 문자열을 모두 지정하십시오.
다음 보기에서 액세스 제어 문자열 "REVERE HTEBAZILE"은 BOS의 등가 문자열에 제공된 액세스 제어 문자열을 무시합니다.
$ DEFINE BOS "BOSTON""ADAMS OLMEKIKA""::"
$ TYPE BOS"REVERE HTEBAZILE"::RIDE.DAT
시스템에서 논리 노드 이름을 반복적으로 변환하는 경우 처음으로 변환되는 논리 노드 이름의 액세스 제어 정보는 그 다음에 오는 액세스 제어 정보를 무시합니다. 예를 들어, 논리 이름 TEST1은 TORONTO"TEST NAMWENLUAP"::DBA1:으로 변환됩니다.
$ DEFINE TORONTO "TRNTO""TEST EIZNEKCAM""::"
$ DEFINE TEST1 "TORONTO""TEST NAMWENLUAP""::DBA1:"
$ TYPE TEST1:PROC.DAT
TORONTO는 논리 노드 이름이므로
반복적 변환이 발생합니다. 즉, 정의에 있는 논리 이름의 모든 수준을 찾을 때까지 운영 체제는 논리 이름 표를 검색합니다. 하지만 DEFINE TEST1 논리 이름 할당의 액세스 제어 문자열은 DEFINE TORONTO 논리 노드 이름 할당의 액세스 제어 문자열을 무시합니다. 그러므로 TYPE 명령은 다음 파일을 표시합니다.
TRNTO"TEST NAMWENLUAP"::DBA1:PROC.DAT
여러 DEFINE 명령을 사용하면 같은 객체를 참조하는 여러 논리 이름을 만들 수 있습니다. 예를 들어, 다음 명령은 논리 이름 $TERMINAL과 CONSOLE을 터미널의 물리적 이름에 일치시키므로 두 개의 논리 이름 모두가 같은 장치(LTA69)로 변환됩니다.
$ DEFINE $TERMINAL LTA69
$ DEFINE CONSOLE LTA69
논리 이름을 삭제하려면 DEASSIGN 명령을 사용합니다. 사용자 프로세스와 작업 논리 이름 표에 논리 이름을 정의하면 사용자 프로세스가 종료되거나 사용자의 작업에 의해 논리 이름이 명시적으로 삭제될 때까지 삭제되지 않습니다. 하지만 DEFINE 명령에 /USER_MODE 한정자를 지정하면 논리 이름은 프로세스 논리 이름 표에 정의되며 그 다음 명령 이미지가 실행된 후에 자동으로 삭제됩니다.
콜론으로 끝나는 논리 이름을 삭제하려면 두 개의 콜론을 지정합니다. ASSIGN 명령처럼 DEASSIGN 명령은 일치하는 항목을 논리 이름 표에서 검색하기 전에 한 개의 콜론을 제거합니다.
시스템에서 DCL 명령행에 있는 파일 지정 방법이나 장치 이름을 읽는 경우 가장 왼쪽 구성 요소가 논리 이름인지 확인하기 위해 파일 지정 방법이나 장치 이름을 확인합니다. 가장 왼쪽 구성 요소가 콜론, 공백, 쉼표 또는 행 종결자(예: Enter)로 끝나는 경우 시스템에서는 이 구성 요소를 논리 이름으로 변환하려고 시도합니다. 가장 왼쪽 구성 요소가 다른 문자로 끝나는 경우 시스템에서는 이 구성 요소를 논리 이름으로 변환하려고 시도하지 않습니다.
다음 보기에 표시된 명령을 입력하면 PUP가 파일 지정 방법의 가장 왼쪽 구성 요소이므로 시스템에서는 PUP가 논리 이름인지 확인합니다. 가장 왼쪽 구성 요소는 Enter로 종료되기 때문에 시스템에서는 PUP를 변환하려고 시도합니다.
다음 보기에 표시된 명령을 입력하면 시스템에서 DISK가 논리 이름인지 확인합니다. DISK가 가장 왼쪽 구성 요소이며 콜론으로 끝나기 때문에 시스템에서 DISK를 변환하려고 시도합니다. 시스템에서 PUP는 확인하지 않습니다.
세 번째 보기에서 가장 왼쪽의 구성 요소는 오른쪽 대괄호()로 끝나므로 [DRYSDALE]PUP를 변환하려고 시도하지 않습니다.
$ TYPE [DRYSDALE]PUP
Enter
논리 이름 변환은 반복(iterative)될 수 있습니다. 시스템에서 논리 이름을 변환한 다음 첫 번째 논리 이름에 포함되어 있는 것을 찾은 논리 이름에 대해 변환 과정을 반복합니다.
시스템에서는 논리 이름 변환을 수행하는 수준 수를 제한합니다. 수준 수는 시스템 기능에 따라 다르지만 적어도 9개는 됩니다. 시스템 결정 수준 수보다 많이 정의하거나 순환 정의를 만드는 경우 논리 이름을 사용할 때 오류가 발생합니다.
다음 보기에서 첫 번째 DEFINE 명령은 논리 이름 DISK를 장치 이름 DUA1에 일치시킵니다. 두 번째 DEFINE 명령은 논리 이름 MEMO를 파일 지정 방법 DISK:[JEFF.MEMOS]COMPLAINT.TXT에 일치시킵니다.
$ DEFINE DISK DUA1:
$ DEFINE MEMO DISK:[JEFF.MEMOS]COMPLAINT.TXT
시스템에서 논리 이름 MEMO를 변환할 때 등가 문자열 DISK:[JEFF.MEMOS]COMPLAINT.TXT를 찾습니다. 그런 다음 이 파일 지정 방법의 가장 왼쪽 구성 요소가 콜론, 공백, 쉼표 또는 행 끝 종결자로 끝나는지 확인합니다. DISK 다음에 있는 콜론을 찾습니다. 그리고 시스템에서 해당 논리 이름도 변환합니다. 파일 지정 방법의 최종 변환은 다음과 같습니다.
DUA1:[JEFF.MEMOS]COMPLAINT.TXT
시스템에서 논리 이름을 변환할 때 현재 기본 장치, 디렉토리 및 버전 번호를 사용하여 파일 지정 방법의 누락 필드를 채웁니다. 명령의 입력 파일을 지정하는 데 논리 이름을 사용하면 이 명령은 논리 이름을 사용하여 파일 지정 방법을 출력 파일에 할당합니다.
등가 문자열이 파일 이름과 파일 유형을 포함하면 출력 파일에도 같은 파일 이름과 파일 유형이 지정됩니다. 등가 문자열에 파일 유형이 포함되어 있지 않으면 기본 파일 유형이 제공됩니다. 제공되는 파일 유형은 사용하고 있는 명령에 따라 다릅니다.
입력 파일 목록에서 논리 이름을 사용하면 각 논리 이름의 등가 문자열에서 임시 기본값을 제공합니다.
다음 보기에서는 장치 이름이 논리 이름 HIG에 대해 지정되어 있지 않기 때문에 MAL의 장치 이름이 임시 기본 장치로 DBA1을 정의합니다.
$ SET DEFAULT DBA2:[CASEY]
$ DEFINE MAL DBA1:[MALCOLM]
$ DEFINE HIG [HIGGINS]
$ PRINT ALPHA,MAL:BETA,HIG:GAMMA
동일한 논리 이름은 두 개 이상의 논리 이름 표에 존재할 수 있습니다. 시스템에서 파일 지정 방법의 논리 이름을 변환하면 일치하는 항목을 찾을 때까지 논리 이름 표 목록을 검색합니다. 시스템은 찾은 첫 번째 일치 항목을 사용합니다.
검색된 논리 이름 표 목록은 논리 이름 LNM$FILE_DEV의 정의에서 지정됩니다. 기본값 목록은 프로세스, 작업, 그룹, 시스템 및 클러스터 전체 시스템 논리 이름 표로 구성됩니다. 검색 순서는 같습니다(프로세스, 작업, 그룹, 시스템 및 클러스터 전체 시스템).
논리 이름과 해당 등가 문자열을 표시하려면 SHOW LOGICAL 명령을 사용합니다.
때때로 논리 이름 정의에 다른 논리 이름이 포함됩니다. SHOW LOGICAL 명령은 반복적인 변환을 수행합니다. 그런 다음 등가 문자열과 변환 수준 모두를 표시합니다. 수준 번호는 0을 기준으로 하므로 0은 첫 번째 수준이며 1은 두 번째 수준이 되는 형태입니다. 지정한 논리 이름에 대해 찾은 첫 번째 변환만 표시하려면 SHOW TRANSLATION 명령을 사용합니다. 자세한 내용은
OpenVMS DCL Dictionary를 참조하십시오.
영구 프로세스 파일의 등가 문자열을 결정하는 데 SHOW LOGICAL 명령을 사용하는 경우(
영구 프로세스 논리 이름 참조), 이 명령은 문자열의 장치 부분만 표시합니다. 예를 들면 다음과 같습니다.
$ SHOW LOGICAL SYS$INPUT
"SYS$INPUT" = "_TTB4:" (LNM$PROCESS_TABLE)
다음 보기에서는 논리 이름 MYDISK가 표시됩니다. 두 개의 변환이 수행되면 숫자 1은 변환의 두 번째 수준을 표시합니다.
$ SHOW LOGICAL MYDISK
"MYDISK" = "WORK4" (LNM$PROCESS_TABLE)
1 "WORK4" = "$255$DUA17:" (LNM$SYSTEM_TABLE)
다음 보기에서 논리 이름 WORKFILE의 등가 문자열이 표시됩니다.
$ SHOW LOGICAL WORKFILE
"WORKFILE" = "DISK2:[WALSH.REPORTS]WORK_SUMMARY.DAT" (LNM$PROCESS_TABLE)
시스템에서는 논리 이름, 논리 이름의 변환 및 논리 이름이 있는 표 이름을 표시합니다.
기본적으로 SHOW LOGICAL 명령은 프로세스, 작업, 그룹, 시스템 및 클러스터 전체 표를 검색하고 일치하는 모든 항목을 표시합니다. 하지만 /TABLE 한정자를 사용하여 검색할 특정 논리 이름 표를 지정할 수 있습니다. 또한, /GROUP, /SYSTEM, /JOB 및 /PROCESS 한정자를 사용하여 그룹, 시스템, 작업 및 프로세스 논리 이름 표의 논리 이름을 각각 표시할 수도 있습니다.
다음 보기에서 SHOW LOGICAL 명령은 /TABLE 한정자를 사용하여 프로세스 논리 이름 표(LNM$PROCESS)의 논리 이름을 표시합니다.
$ SHOW LOGICAL/TABLE=LNM$PROCESS
(LNM$PROCESS_TABLE)
"DECW$DISPLAY" = "_WSA30:"
"SYS$COMMAND" = "_FIFI$VTA65:"
"SYS$DISK" [super] = "WORK1:"
"SYS$DISK" [exec] = "WORK1:"
"SYS$ERROR" = "_FIFI$VTA65:"
"SYS$INPUT" = "_FIFI$VTA65:"
"SYS$OUTPUT" [super] = "_FIFI$VTA65:"
"SYS$OUTPUT" [exec] = "_FIFI$VTA65:"
"TT" = "_VTA65:"
논리 이름의 변환 속성과 액세스 모드를 표시하려면 다음과 같이
SHOW LOGICAL/FULL 명령을 사용합니다.
$ SHOW LOGICAL/FULL SYS$ERROR
"SYS$ERROR" [exec] = "_PADRAIC$TDA824:" [terminal] (LNM$PROCESS_TABLE)
이 보기에서는 실행 모드에서 논리 이름 SYS$ERROR를 표시하고 변환 속성 terminal을 표시합니다.
논리 이름이 단일 DEFINE(또는 ASSIGN) 명령에서 여러 개의 등가 문자열과 일치하면 검색 목록이 만들어집니다.
파일 지정 방법에서 검색 목록을 사용하면 검색 목록은 다음과 같이 변환됩니다.
검색 목록에 한 장치만 포함되어 있으면 원본 기본 디렉토리가 검색됩니다.
검색 목록에 장치와 디렉토리가 있는 경우 완전한 파일 지정 방법을 구성하는 데 두 개 모두가 사용됩니다.
시스템은 일치하는 항목을 찾을 때까지 사용자가 등가 문자열을 지정한 순서로 논리 이름을 변환합니다.
해당 명령은 찾은 첫 번째 파일에만 영향을 미치고 그 지점에서 검색이 종료됩니다. 일치하는 항목을 찾지 못하면 시스템이 찾으려고 시도한 마지막 파일에 대해서만 오류를 보고합니다.
검색 목록은 와일드카드가 아니고 검색할 위치의 목록입니다.
다음 보기에서 논리 이름 GETTYSBURG는 검색 목록입니다.
$ DEFINE GETTYSBURG [JONES.HISTORY],[JONES.WORKFILES]
$ SHOW LOGICAL GETTYSBURG
"GETTYSBURG" = "[JONES.HISTORY]" (LNM$PROCESS_TABLE)
= "[JONES.WORKFILES]"
다음 보기에서 TYPE 명령은 GETTYSBURG의 선행 논리 이름 정의에 지정되어 있는 순서대로 [JONES.WORKFILES]를 검색하기 전에 등가 문자열 [JONES.HISTORY]를 검색합니다.
$ TYPE GETTYSBURG:SPEECH.TXT
DISK1:[JONES.HISTORY]SPEECH.TXT;2
Fourscore and seven years ago, our fathers brought
forth on this continent a new nation, conceived
in liberty, and dedicated to the proposition that
all men are created equal.
.
.
.
TYPE 명령에서 SPEECH.TXT라는 파일을 찾으면 검색을 끝내고 해당 파일을 표시합니다.
와일드카드를 허용하는 명령과 함께 검색 목록 사용
와일드카드를 허용하는 명령과 함께 검색 목록을 사용할 수 있습니다. 와일드카드를 사용하면 시스템은 검색 목록에 있는 각각의 등가 문자열을 사용하여 파일 지정 방법을 구성합니다. 명령은 기존 파일을 식별하는 각 파일 지정 방법에서 실행됩니다.
다음 보기에서 DIRECTORY 명령은 버전 필드의 와일드카드 문자로 지정됩니다.
따라서 이 명령은 GETTYSBURG에 의해 정의된 검색 목록에서 모든 버전의 SPEECH.TXT를 찾습니다.
$ DIRECTORY GETTYSBURG:SPEECH.TXT;*
Directory DISK1:[JONES.HISTORY]
SPEECH.TXT;2 SPEECH.TXT;1
Total of 2 files.
Directory DISK1:[JONES.WORKFILES]
SPEECH.TXT;1
Total of 1 file.
Grand total of 2 directories, 3 files.
검색 목록을 입력하면(예: DIRECTORY 명령 사용), 운영 체제에서는 목록의 다른 부분에서 누락된 파일 지정 방법의 일부를 제공하기 위해 목록의 한 부분에 있는 요소를 사용합니다. 다음 보기의 SYS$LOGIN에서 표시하는 것처럼 파일 지정 방법이 완전하지 않으면 명령행은 여러 파일 및 파일 없음 상태를 만듭니다.
$ DIRECTORY SYS$MANAGER:LOGIN.COM,SYS$LOGIN
다음과 같이 파일 지정 방법 다음에 세미콜론을 붙이면 여러 파일 및 파일 없음 상태를 만드는 것을 방지할 수 있습니다.
$ DIRECTORY SYS$MANAGER:LOGIN.COM;,SYS$LOGIN
SET DEFAULT 명령과 함께 검색 목록 사용
검색 목록을 SET DEFAULT 명령 매개 변수의 첫 번째 부분으로 지정하면 시스템에서는 변환되지 않은 검색 목록 이름을 SYS$DISK에 할당합니다. SYS$DISK는 기본 디스크로 변환되는 논리 이름입니다. 검색 목록을 SET DEFAULT 명령 매개 변수의 첫 번째 부분으로 지정할 때 검색 목록의 각 등가 문자열은 장치 이름을 포함해야 합니다.
다음 보기에서는 장치와 디렉토리가 모두 지정되어 있으므로 두 개 모두가 파일 지정 방법을 구성하는 데 사용됩니다.
$ DEFINE FIFI DISK1:[FRED],DISK2:[GLADYS],DISK3:[MEATBALL.SUB]
$ DIRECTORY FIFI:MEMO.LIS
DISK1:[FRED]MEMO.LIS
DISK2:[GLADYS]MEMO.LIS
DISK3:[MEATBALL.SUB]MEMO.LIS
다음 보기에서 SHOW DEFAULT 명령은 기본 디스크 및 디렉토리를 DISK2:[MEATBALL.SUB]로 표시합니다. 다음으로 검색 목록 FIFI를 정의합니다. SET DEFAULT 명령은 검색 목록을 매개 변수로 사용합니다. SHOW DEFAULT 명령의 두 번째 사용은 기본 디렉토리가 변경되지 않았음을 표시합니다. 하지만 검색 목록 FIFI는 등가 문자열과 함께 기본 장치로 표시됩니다. SHOW DEFAULT 명령은 시스템에서 검색 목록을 평가하는 순서로 검색 목록을 표시합니다.
$ SHOW DEFAULT
DISK2:[MEATBALL.SUB]
$ DEFINE FIFI DISK1:[FRED], DISK2:[GLADYS], DISK3:
$ SET DEFAULT FIFI
$ SHOW DEFAULT
FIFI:[MEATBALL.SUB]
= DISK1:[FRED]
= DISK2:[GLADYS]
= DISK3:[MEATBALL.SUB]
RUN 명령 다음에 검색 목록이 오면 시스템은 이전에 설명한 대로 파일 지정 방법을 구성하지만, 그런 다음 이 목록의 파일이 이미지로 설치되었는지 확인합니다. 검색 목록에서 설치된 이미지인 첫 번째 파일을 실행합니다. 그런 다음 RUN 명령이 종료됩니다.
파일 지정 방법 중 설치된 이미지가 없으면 시스템에서는 파일 지정 방법을 구성하는 프로세스를 반복합니다. 이번에는 디스크에서 각각의 파일 지정 방법을 찾고 여기서 찾은 첫 번째 파일을 실행합니다. 지정한 파일을 알려진 파일 목록이나 디스크에서 찾지 못하면 오류 메시지가 표시됩니다.
파일 지정 방법은 두 개 이상의 검색 목록을 포함할 수 있습니다. 이 경우 첫 번째 장치 이름은 상수로 유지되고 파일 이름 검색 목록의 각 항목이 사용됩니다. 파일 이름 검색 목록의 모든 항목이 첫 번째 장치 이름과 연결된 다음 두 번째 장치 이름과 연결됩니다. 각 장치를 검색할 때까지 이 프로세스가 계속됩니다.
검색 목록의 한 이름이 다른 검색 목록으로 변환되면 반복적(중첩된) 검색 목록이 있을 수도 있습니다. 이러한 경우 시스템에서는 다음 상위 수준 이름을 계속 처리하기 전에 하위 목록에 있는 각각의 이름을 사용합니다.
다음 보기는 파일 이름 및 장치 이름에 검색 목록이 있는 파일 지정 방법을 보여 줍니다.
$ DEFINE FILE CHAP1.RNO, CHAP2.RNO
$ DEFINE DISK WORK1:[ROSE], WORK2:[THORN]
$ SET DEFAULT DISK
$ DIRECTORY FILE
Directory WORK1:[ROSE]
CHAP1.RNO;2 CHAP2.RNO;1
Total of 2 files.
Directory WORK2:[THORN]
CHAP1.RNO;1 CHAP2.RNO;1
Total of 2 files.
Grand total of 2 directories, 4 files.
각 파일 이름에 대해 디렉토리 목록이 주어집니다. WORK1:[ROSE]에 대해서는 첫 번째 디렉토리 목록이 WORK2:[THORN]에 대해서는 두 번째 디렉토리 목록이 주어집니다.
다음 보기는 반복적 검색 목록을 보여 줍니다.
$ DEFINE NESTED FRED.DAT, NEW_LIST, RICKY.DAT
$ DEFINE NEW_LIST ETHEL.DAT, LUCY.DAT
검색 목록 NESTED의 검색 순서는 다음과 같습니다.
할당량(해당 논리 이름에서 사용하는 풀의 양을 제한하기 위해)
시스템 초기화 중에 몇 개의 공유 논리 이름 표가 만들어집니다. 새 프로세스를 만들 때 시스템에서 해당 프로세스에 대한 공유 및 프로세스-개인인 여러 가지 다른 표를 만듭니다. 이러한 모든 표는
기본 논리 이름 표에 나와 있습니다.
논리 이름 표를 만들때 이 표의 액세스 모드를 지정할 수 있습니다. 지정하지 않으면 표 만들기를 요청한 액세스 모드(일반적으로 감독자 모드나 사용자 모드)가 기본 모드가 됩니다. 논리 이름 표는 고유한 액세스 모드 및 하위 특권 액세스 모드의 논리 이름을 포함할 수 있습니다. 논리 이름 표는 동일하거나 하위 특권 액세스 모드의 다른 표에 대해 상위 표가 될 수 있습니다.
논리 이름 표는 이름(논리 이름)으로 식별할 수 있습니다. 각 이름 표 이름은 논리 이름 표 내에 논리 이름으로 포함되어야 합니다.
디렉토리라는 다음 두 개의 특수 논리 이름 표가 논리 이름 표 이름의 컨테이너로 존재합니다.
프로세스 디렉토리, LNM$PROCESS_DIRECTORY
프로세스 디렉토리는 해당 프로세스의 모든 프로세스-개인 표의 이름과 고유의 표 이름을 포함합니다. 각 프로세스에는 고유의 프로세스-개인 디렉토리가 있습니다.
시스템 디렉토리, LNM$SYSTEM_DIRECTORY
시스템 디렉토리는 모든 공유 표의 이름과 고유의 표 이름을 포함합니다. 시스템마다 하나의 LNM$SYSTEM_DIRECTORY가 있습니다.
이러한 디렉토리는 반복적으로 표 이름으로 변환되는 이름을 포함합니다. 표로 변환되는 모든 논리 이름 표 이름과 논리 이름은 이러한 디렉토리에 보관됩니다.
논리 이름 표의 상위 표가 반드시 디렉토리 표일 필요는 없습니다. 즉, 이 계층 구조는 논리 이름 표 이름의 위치와 구별됩니다.
논리 이름 표에 대한 논리 이름 디렉토리 표의 관계를 표시하려면 다음 보기에서와 같이 SHOW LOGICAL/STRUCTURE 명령을 입력합니다.
$ SHOW LOGICAL/STRUCTURE
(LNM$PROCESS_DIRECTORY)
(LNM$PROCESS_TABLE)
(LNM$SYSTEM_DIRECTORY)
(LNM$SYSTEM_TABLE)
(LMF$LICENSE_TABLE)
(LNM$CLUSTER_TABLE)
(LNM$SYSCLUSTER_TABLE)
(LNM$GROUP_000123)
(LNM$JOB_824E98E0)
.
.
.
이 보기는 각 논리 이름 표 디렉토리에 있는 논리 이름 표 이름을 보여 줍니다. 또한, LNM$CLUSTER_TABLE과 LNM$SYSCLUSTER_TABLE의 관계도 보여 줍니다.
기본 논리 이름 표에는 시스템 디렉토리 및 프로세스 디렉토리 표를 비롯한 실행 모드에서 만든 기본 표가 표시됩니다.
|
|
|
|
|
|
|
|
|
|
|
반복적으로 표 이름으로 변환되는 이름 및 프로세스-개인 논리 이름 표 이름의 정의가 들어 있습니다.
|
|
|
|
|
SYS$DISK 및 SYS$INPUT과 같은 프로세스-개인 논리 이름이 들어 있습니다.
|
|
|
|
|
|
|
반복적으로 표 이름으로 변환되는 이름 및 공유 논리 이름 표 이름의 정의가 들어 있습니다.
|
|
|
|
|
SYS$LIBRARY 및 SYS$SYSTEM과 같은 시스템의 모든 프로세스에서 공유하는 이름이 들어 있습니다.
|
|
|
|
|
OpenVMS Cluster 시스템의 모든 프로세스에서 공유하는 이름이 들어 있습니다.
|
|
|
|
|
LNM$SYSCLUSTER_TABLE을 포함하는 모든 클러스터 전체 논리 이름 표의 상위 표입니다.
|
|
|
|
|
해당 UIC 그룹의 모든 프로세스에서 공유하는 이름이 들어 있습니다.
|
|
|
|
|
SYS$LOGIN 및 SYS$SCRATCH와 같은 작업 트리의 모든 프로세스에서 공유하는 이름이 들어 있습니다.
|
1
문자열 gggggg는 프로세스의 UIC 그룹 번호를 포함하는 6자리 8진수를 나타냅니다.
2
문자열 xxxxxxxx는 작업 정보 블록의 주소인 8자리 16진수를 나타냅니다.
|
표 11-2에는 로그인할 때 프로세스 논리 이름 디렉토리 표, LNM$PROCESS_DIRECTORY에서 만든 프로세스-개인 논리 이름이 표시됩니다.
|
|
|
|
|
LNM$GROUP_ gggggg로 정의된 그룹 논리 이름입니다. 여기서 gggggg는 해당 그룹 번호를 나타냅니다. LNM$GROUP_ gggggg1는 UIC 그룹에서 사용하는 논리 이름 표입니다. 표 LNM$GROUP_ gggggg는 시스템 디렉토리 표에서 카탈로그로 만들어집니다. 그러므로 LNM$GROUP은 반복적으로 그룹 논리 이름 표의 이름으로 변환되는 논리 이름입니다.
|
|
|
LNM$JOB_ xxxxxxxx로 정의된 작업 논리 이름입니다. 여기서 xxxxxxxx2는 작업 트리에 대해 고유한 번호를 나타냅니다. LNM$JOB_ xxxxxxxx는 사용자 작업에서 사용하는 논리 이름 표입니다. 표 LNM$JOB_ xxxxxxxx는 시스템 디렉토리 표에서 카탈로그로 만들어집니다. 그러므로 LNM$JOB은 반복적으로 사용자 작업 논리 이름 표의 이름으로 변환되는 논리 이름입니다.
|
|
|
프로세스 논리 이름 표의 이름인, LNM$PROCESS_TABLE로 반복적으로 변환되는 프로세스 논리 이름입니다.
|
|
|
프로세스 디렉토리 논리 이름 표의 이름입니다.
|
1
문자열 gggggg는 프로세스의 UIC 그룹 번호를 포함하는 6자리 8진수를 나타냅니다.
2
문자열 xxxxxxxx는 작업 정보 블록의 주소인 8자리 16진수를 나타냅니다.
|
시스템의 각 프로세스에는 LNM$PROCESS_TABLE이라는 프로세스 논리 이름 표가 있습니다. 프로세스 표의 이름은 해당 프로세스 및 후속 하위 프로세스에서만 사용할 수 있습니다. 로그인하면 시스템에서는 프로세스의 논리 이름을 만들고 프로세스 표에 놓습니다.
이름 LNM$PROCESS를 통해서 간접적으로 LNM$PROCESS_TABLE을 참조할 수 있습니다. 다음 보기에서와 같이 이러한 간접 참조를 통해 LNM$PROCESS를 여러 등가 이름으로 재정의하여 그 안에 있는 한 개 이상의 사용자 고유 표를 포함시킬 수 있습니다.
$CREATE/NAME_TABLE APPLICATION_NAMES
$DEFINE/TAB=LNM$PROCESS_DIRECTORY LNM$PROCESS APPLICATION_NAMES,
LNM$PROCESS_TABLE
기본적으로 프로세스 표에는
프로세스 논리 이름 표의 기본 논리 이름에 표시된 논리 이름이 들어 있습니다. 논리 이름 SYS$INPUT, SYS$OUTPUT, SYS$ERROR 및 SYS$COMMAND는 영구 프로세스 파일(프로세스 수명 동안에 열린 상태로 있는 파일)을 참조합니다. 영구 프로세스 파일에 대한 자세한 내용은
영구 프로세스 논리 이름을 참조하십시오.
표 11-3 프로세스 논리 이름 표의 기본 논리 이름
|
|
|
|
|
DCL이 입력을 읽어들이는 초기 파일(일반적으로 사용자 터미널)입니다. DCL이 입력을 읽어들이는 파일을 입력 스트림이라고 합니다. 명령 인터프리터는 SYS$COMMAND를 사용하여 원본 입력 스트림을 “기억 ”합니다.
|
|
|
로그인 시 설정되거나 SET DEFAULT 명령으로 변경되는 기본 장치입니다.
|
|
|
DCL이 경고, 오류, 심각한 오류로 인해 발생하는 시스템 오류 메시지를 쓰는 기본 장치나 파일입니다.
|
|
|
|
|
|
OpenVMS용 DECnet 작업 대 작업 통신의 대상 프로세스를 호출하는 원본 프로세스입니다. 대상 프로세스에서 열면 SYS$NET은 프로세스가 파트너와 데이터를 교환할 수 있는 논리 링크를 표시합니다. SYS$NET은 작업 대 작업 통신 중에만 정의됩니다.
|
|
|
DCL이 출력을 기록하는 기본 파일(일반적으로 사용자 터미널)입니다. DCL이 출력을 쓰는 파일을 출력 스트림이라고 합니다.
|
|
|
|
표 11-4에는 시스템 디렉토리 표 LNM$SYSTEM_DIRECTORY에 포함된 기본 시스템 논리 이름이 표시됩니다.
표 11-4 시스템 논리 이름 디렉토리의 기본 논리 이름
|
|
|
|
|
반복적으로 LNM$CLUSTER_TABLE로 변환되는 클러스터 전체 상위 표의 논리 이름입니다 .
|
|
|
LNM$FILE_DEV로 정의되는 DCL 논리 이름입니다. LNM$DCL_LOGICAL은 SHOW LOGICAL 명령, SHOW TRANSLATION 명령 및 F$TRNLNM 렉시칼 함수에 의해 검색되고 표시되는 논리 이름 표의 목록으로 반복적으로 변환됩니다. 기본적으로 이러한 명령은 프로세스, 작업, 그룹, 시스템 및 클러스터 전체 시스템 논리 이름 표 순서로 검색하고 표시합니다.
|
|
|
LNM$PROCESS_DIRECTORY 및 LNM$SYSTEM_DIRECTORY로 정의되는 디렉토리 논리 이름입니다.
|
|
|
파일 지정 방법을 처리할 때 시스템에서 검색하는 논리 이름 표 목록으로 정의되는 검색 목록의 논리 이름입니다. LNM$PROCESS, LNM$JOB, LNM$GROUP 및 LNM$SYSTEM으로 정의되므로 시스템은 프로세스, 작업, 그룹, 시스템 및 클러스터 전체 시스템 논리 이름 표 순서로 검색합니다.
|
|
|
사용자 그룹 표, LNM$GROUP_ gggggg에 정의되는 그룹 논리 이름입니다. 1
|
|
|
LNM$JOB_ xxxxxxxx로 정의되는 작업 논리 이름입니다. 2
|
|
|
LNM$SYSTEM으로 정의되는 영구 우편함 논리 이름입니다. 영구 우편함과 연결된 논리 이름은 논리 이름 LNM$PERMANENT_MAILBOX가 반복적으로 변환되는 논리 이름 표에 입력됩니다.
|
|
|
반복적으로 LNM$SYSCLUSTER_TABLE로 변환되는 클러스터 전체 시스템 논리 이름 표의 논리 이름입니다.
|
|
|
반복적으로 LNM$SYSTEM_TABLE, LNM$SYSCLUSTER로 변환되는 시스템 논리 이름 표 이름입니다.
|
|
|
LNM$JOB으로 정의되는 임시 우편함 논리 이름입니다. 임시 우편함과 연결된 논리 이름은 논리 이름 LNM$TEMPORARY_MAILBOX가 반복적으로 변환되는 논리 이름 표에 입력됩니다.
|
|
|
|
1
문자열 gggggg는 프로세스의 UIC 그룹 번호를 포함하는 6자리 8진수를 나타냅니다.
2
문자열 xxxxxxxx는 작업 정보 블록의 주소인 8자리 16진수를 나타냅니다.
|
이 절에서는 기본 공유 논리 이름 표를 설명합니다.
클러스터 전체 시스템 표, LNM$SYSCLUSTER_TABLE
LNM$SYSCLUSTER_TABLE은 클러스터 전체 시스템 논리 이름 표의 이름입니다. 이 표에는 클러스터의 모든 사용자가 사용할 수 있는 논리 이름이 들어 있습니다.
이름 LNM$SYSCLUSTER를 통해 간접적으로 LNM$SYSCLUSTER_TABLE을 참조할 수 있습니다. 간접 참조를 통해 LNM$SYSCLUSTER를 여러 등가 이름으로 재정의하고 그 안에 사용자 고유 표를 포함시킬 수 있습니다.
클러스터 전체 상위 표, LNM$CLUSTER_TABLE
LNM$CLUSTER_TABLE은 LNM$SYSCLUSTER_TABLE을 비롯한 모든 클러스터 전체 논리 이름 표의 상위 표입니다. 이 표를 참조하려면 논리 이름 LNM$CLUSTER를 사용합니다.
사용자 그룹 표의 이름은 LNM$GROUP_
gggggg(
gggggg는 사용자 식별 코드[UIC] 그룹 번호를 나타냄)입니다. 이 표의 이름은 같은 UIC 그룹 번호를 갖는 모든 사용자가 사용할 수 있습니다. 시스템의 각 그룹에는 해당되는 그룹 논리 이름 표가 있습니다.
이름 LNM$GROUP을 통해 간접적으로 LNM$GROUP_
gggggg를 참조할 수 있습니다. 간접 참조를 통해 LNM$GROUP_
gggggg를 여러 등가 이름으로 재정의하고 그 안에 사용자 고유 표를 포함시킬 수 있습니다. 또한, 이렇게 하면 UIC 그룹 번호를 기억할 필요가 없으며 가장 최근에 정의된 표를 사용하고 있는지 확인합니다.
사용자 작업 표의 이름은 LNM$JOB_
xxxxxxxx(
xxxxxxxx는 작업 트리에 대해 시스템에서 정의한 작업 정보 블록[JIB]을 나타냄)입니다.
작업 표에는 작업 트리의 모든 프로세스(해당 프로세스 및 모든 하위 프로세스)에서 사용할 수 있는 논리 이름이 들어 있습니다. 시스템의 각 작업 트리에 대해 한 개의 작업 표가 있습니다. 작업 표는 공유 가능하므로 작업 트리의 모든 프로세스에서 액세스할 수 있습니다.
이름 LNM$JOB을 통해 간접적으로 LNM$JOB_
xxxxxxxx를 참조할 수 있습니다. 이 간접 참조를 통해 LNM$JOB을 여러 등가 이름으로 재정의하고 그 안에 사용자 고유 표를 포함시킬 수 있습니다. 또한, LNM$JOB을 사용하면 JIB 주소를 찾을 필요가 없으며 가장 최근에 정의된 작업 표를 사용하고 있는지 확인할 수 있습니다.
시스템은 마운트된 디스크, 마운트된 테이프 및 임시 우편함에 대해 만든 논리 이름을 작업 논리 이름 표에 놓습니다. 또한, 시스템에서는 다음 논리 이름을 만듭니다.
사용자가 로그인할 때의 기본 장치 및 디렉토리입니다.
OpenVMS용 DECnet 네트워크 연결을 통해 초기화된 작업에 대한 것으로, 작업이 시작된 원격 노드의 프로세스 ID입니다. OpenVMS 운영 체제에서 이 프록시 로그인이 활성화되어 있는 경우 이 ID는 프로세스의 사용자 이름이고 프록시 로그인이 활성화되어 있지 않은 경우에는 프로세스 ID(PID) 번호입니다. 프록시 계정에 대한 프록시 로그인을 통해 사용자가 액세스 제어 문자열을 지정하지 않고 네트워크를 통해 파일에 액세스할 수 있습니다.
OpenVMS용 DECnet 네트워크 연결을 통해 초기화된 작업에 대한 것으로, 작업이 시작된 원격 노드의 이름입니다.
임시 파일이 쓰여진 기본 장치 및 디렉토리입니다.
시스템 표의 이름은 LNM$SYSTEM_TABLE입니다. 시스템 표에는 시스템 수준에서 시스템의 모든 사용자가 사용할 수 있는 논리 이름이 있습니다.
시스템 표는 일반적으로 검색 목록 LNM$SYSTEM_TABLE, LNM$SYSCLUSTER로 정의된 LNM$SYSTEM을 통해 간접적으로 참조할 수 있습니다. 이 노드에 로컬인 시스템 이름과 클러스터의 모든 노드에 일반적인 시스템 이름을 포함하려면 이름 LNM$SYSTEM을 사용합니다.
표 11-5에는 시스템이 시작할 때 시스템 표에 자동으로 정의되는 논리 이름이 표시됩니다.
표 11-5 시스템 논리 이름 표의 기본 논리 이름
|
|
|
|
|
|
OpenVMS 디버거의 기본 입력 스트림으로 프로세스 수준의 SYS$INPUT과 일치합니다.
|
|
|
|
OpenVMS 디버거의 기본 출력 스트림으로 프로세스 수준의 SYS$OUTPUT과 일치합니다.
|
|
|
|
SYS$SYSROOT의 일반적 부분에 대한 장치 및 디렉토리 이름입니다.
|
SYS$SYSDEVICE:[SYS n.SYSCOMMON.], 여기서 n은 프로세서의 루트 디렉토리 번호입니다.
|
|
|
오류 로그 데이터 파일의 장치 및 디렉토리 이름입니다.
|
|
|
|
|
SYS$SYSROOT:[SYSHLP.EXAMPLES]
|
|
|
시스템 도움말 파일의 장치 및 디렉토리 이름입니다.
|
|
|
|
시스템 지시 사항 데이터 파일의 장치 및 디렉토리 이름입니다.
|
|
|
|
시스템 라이브러리의 장치 및 디렉토리 이름입니다.
|
|
|
|
운영 체제 실행 로드 가능한 이미지, 장치 드라이버 및 기타 실행 로드된 코드의 장치 및 디렉토리입니다.
|
|
|
|
시스템 유지보수 파일의 장치 및 디렉토리 이름입니다.
|
|
|
|
시스템 관리자 파일의 장치 및 디렉토리 이름입니다.
|
|
|
|
시스템 메시지 파일의 장치 및 디렉토리 이름입니다.
|
|
|
|
시스템에서 OpenVMS용 DECnet이 활성화되고 사용자가 네트워크에 연결되어 있는 경우 로컬 시스템에 대한 네트워크 노드 이름입니다.
|
|
|
|
이미지 덤프가 쓰여지는 디렉토리이며 사용자가 설정합니다.
|
|
|
|
시스템 공유 이미지의 장치 및 디렉토리 이름입니다.
|
|
|
|
SYS$SYSDEVICE의 노드 특유의 부분에 대한 장치 및 디렉토리 이름입니다.
|
SYS$SYSDEVICE:[SYS n.], 여기서 n은 사용자 프로세서의 루트 디렉토리 번호입니다.
|
|
|
시스템 시작 파일의 장치 및 디렉토리 이름입니다.
|
먼저 SYS$SYSROOT:[SYS$STARTUP]을 가리킨 다음 SYS$MANAGER를 가리키는 검색 목록입니다.
|
|
|
시스템 디렉토리를 포함하는 시스템 디스크입니다.
|
|
|
|
시스템 디렉토리의 장치 및 루트 디렉토리입니다.
|
먼저 SYS$SYSDEVICE:[SYS n.]을 가리킨 다음 SYS$COMMON을 가리키는 검색 목록입니다. 여기서 n은 프로세서의 루트 디렉토리 번호입니다.
|
|
|
운영 체제 프로그램 및 프로시저의 장치 및 디렉토리입니다.
|
|
|
|
UETP(사용자 환경 테스트 패키지) 파일의 장치 및 디렉토리 이름입니다.
|
|
|
|
시스템 업데이트 파일의 장치 및 디렉토리 이름입니다.
|
|
운영 체제에서 제공하는 공유 논리 이름 표는 기본 보호로 만들어집니다.
표 11-6에는 공유 논리 이름 표의 각 유형에 대한 기본 보호가 표시됩니다.
|
|
|
|
|
|
|
SYSTEM=RWCD, OWNER=RWCD, GROUP=NO ACCESS, WORLD=NO ACCESS
|
|
|
|
SYSTEM=RWCD, OWNER=R, GROUP=R, WORLD=NO ACCESS
|
|
|
|
SYSTEM=RWC, OWNER=RWC, GROUP=R, WORLD=R
|
|
|
|
SYSTEM=RWC, OWNER=RWC, GROUP=R, WORLD=R
|
|
|
|
SYSTEM=RWC, OWNER=RWC, GROUP=R, WORLD=R
|
|
|
|
SYSTEM=RWCD, OWNER=RWCD, GROUP=NO ACCESS, WORLD=NO ACCESS
|
1
문자열 xxxxxxxx는 작업 정보 블록의 주소인 8자리 16진수를 나타냅니다.
2
문자열 gggggg는 프로세스의 UIC 그룹 번호를 포함하는 6자리 8진수를 나타냅니다.
|
공유 논리 이름 관리를 위한 특권 및 액세스 요구 사항
표 11-7에는 공유 논리 이름 표의 각 유형에 있는 논리 이름 만들기, 삭제 및 읽기(변환)에 필요한 특권 및 액세스 권한이 표시됩니다. 특권, 액세스 유형 및 액세스 제어에 대한 자세한 내용은 이 매뉴얼의
10장을 참조하십시오.
표 11-7 공유 논리 이름 작업에 필요한 특권 또는 액세스 유형
|
|
|
|
|
|
|
|
|
이름이 만들어지거나 이름이 삭제되는 표에 대한 WRITE(W) 액세스
|
|
|
|
|
|
|
|
|
|
이름이 만들어지거나 이름이 삭제되는 표에 대한 WRITE(W) 액세스 또는 GRPNAM 특권
|
|
|
|
|
|
|
|
|
|
시스템 UIC 그룹 번호(0과 시스템 매개 변수 MAXSYSGROUP의 값 사이) 또는 SYSNAM 특권
|
|
|
|
|
|
|
|
|
|
시스템 UIC 그룹 번호(0과 시스템 매개 변수 MAXSYSGROUP의 값 사이) 또는 SYSNAM 특권
|
|
|
|
|
|
|
|
|
|
시스템 UIC 그룹 번호(0과 시스템 매개 변수 MAXSYSGROUP의 값 사이)
|
|
|
|
|
|
|
|
|
|
이름이 만들어지거나 이름이 삭제되는 표에 대한 WRITE(W) 액세스
|
|
|
|
|
|
1
문자열 xxxxxxxx는 작업 정보 블록의 주소인 8자리 16진수를 나타냅니다.
2
문자열 gggggg는 프로세스의 UIC 그룹 번호를 포함하는 6자리 8진수를 나타냅니다.
|
CREATE/NAME_TABLE 명령은 논리 이름 표를 만들고 디렉토리 논리 이름 표 중 하나에서 이 표를 카탈로그로 만듭니다. 논리 이름 표를 식별하거나 반복적으로 논리 이름 표로 변환되는 논리 이름은 항상 디렉토리 논리 이름 표 중 하나에 입력되어야 합니다.
사용자 프로세스에 대한 개인 논리 이름 표를 만들려면 LNM$PROCESS_DIRECTORY(기본값)에 표를 만듭니다.
디렉토리 표의 이름은 1-31자를 포함할 수 있습니다. 대문자 영숫자 문자, 달러 기호($) 및 밑줄(_)만 유효합니다. 소문자 표 이름을 지정하면 자동으로 대문자로 변환됩니다.
다음 보기는 TAX라는 프로세스-개인 논리 이름 표를 만들어 논리 이름 CREDIT의 정의를 표에 놓은 다음 표 작성을 확인합니다. SHOW LOGICAL/TABLE 명령을 사용하면 표시할 논리 이름 표를 지정할 수 있습니다.
$ CREATE/NAME_TABLE TAX
$ DEFINE/TABLE=TAX CREDIT [ACCOUNTS.CURRENT]CREDIT.DAT
$ SHOW LOGICAL/TABLE=TAX CREDIT
"CREDIT" = "[ACCOUNTS.CURRENT]CREDIT.DAT" (TAX)
파일 조회 중에 시스템에서 새 표를 자동으로 검색하게 하려면 다음 보기에서와 같이 LNM$PROCESS를 재정의할 수 있습니다.
$ DEFINE/TABLE=LNM$PROCESS_DIRECTORY LNM$PROCESS LNM$PROCESS_TABLE, TAX
공유 논리 이름 표를 만들려면 /PARENT_TABLE 한정자를 사용하여 공유 표 이름을 지정합니다. 예를 들면 다음과 같습니다.
$ CREATE/NAME_TABLE/PARENT_TABLE=LNM$SYSTEM_DIRECTORY NEWTAB
다른 공유 논리 이름 표를 만드는 것과 같은 방식으로 클러스터 전체 논리 이름 표를 만들 수 있습니다. 클러스터 전체 논리 이름 표는 공유 논리 이름 표의 특수 유형이며 모든 공유 논리 이름 표에 적용되는 특권 및 액세스 요구 사항을 따릅니다(
특권 및 액세스 요구 사항 참조).
다음 보기는 클러스터 전체 논리 이름 표를 만드는 방법을 보여 줍니다.
$ CREATE/NAME_TABLE/PARENT_TABLE=LNM$CLUSTER_TABLE -
_$
new_clusterwide_logical_name_table
새 클러스터 전체 논리 이름 표에 있게 되는 클러스터 전체 논리 이름을 만들려면 다음 보기에서와 같이 /TABLE 한정자를 사용하여 새 표 이름을 지정하여 DEFINE 명령으로 새 클러스터 전체 논리 이름을 정의합니다.
$ DEFINE/TABLE=
new_clusterwide_logical_name_tablelogical_name -
_$
equivalence_string
특권이 있는 사용자는 특수 목적으로 공유 논리 이름 표를 만들 수 있습니다. 예를 들어, 어플리케이션에서 한 개 이상의 공유 논리 이름 표를 만들어 파일 위치와 같은 정보를 어플리케이션 사용자에게 전달하도록 할 수 있습니다.
$ CREATE/NAME_TABLE APPX_FILE_LOCATOR /PARENT=LNM$SYSTEM_DIRECTORY -
_$ /PROTECTION = (S:RWD,O:RWD,G:R,W:R)
공유 논리 이름 표를 만들려면 다음이 있어야 합니다.
SYSPRV 특권 또는 LNM$SYSTEM_DIRECTORY에 대한 WRITE(W) 액세스
공유 논리 이름 표를 삭제하려면 다음이 있어야 합니다.
SYSPRV 특권 또는 LNM$SYSTEM_DIRECTORY에 대한 WRITE(W) 액세스
운영 체제는 자신이 만들거나 사용자가 만든 공유 논리 이름 표에 대한 기본 보호를 제공합니다. 기본 보호는 시스템 관리자나 표 소유자가 수정할 수 있는 보안 프로파일에 저장됩니다. 자세한 내용은
OpenVMS Guide to System Security를 참조하십시오.
다음과 같은 방법으로 사용자가 만든 표의 기본 보호를 수정할 수 있습니다.
DCL CREATE/NAME_TABLE 명령과 함께 /PROTECTION 한정자를 사용합니다. 이 명령을 사용하면 UIC 기반 보호를 설정할 수 있습니다.
SET SECURITY/ACL/OBJECT_TYPE=LOGICAL_NAME_TABLE 명령이나 ACL 편집기로 이미 만든 표에 ACL 보호를 적용합니다.
공유 논리 이름 표의 ACL은 시스템 부팅 사이에서 저장되지 않습니다. 시스템이 부팅될 때마다 이러한 논리 이름 표에 대해 ACL을 다시 설정해야 합니다.
공유 논리 이름 표에 대한 ACL 보호 적용에 대한 자세한 내용은
OpenVMS DCL Dictionary의 SET SECURITY/ACL 명령을 참조하십시오.
할당량은 주어진 논리 이름 표에서 소비할 수 있는 시스템 리스소 양을 제한할 때 사용합니다. 프로세스, 그룹 및 시스템 논리 이름 표에는 무제한 할당량이 있습니다. 기본적으로 논리 이름 표를 만들면 이 표에도 무제한 할당량이 있습니다.
할당량을 지정하여 사용자가 만든 논리 이름 표의 크기(바이트)를 제한할 수 있습니다. 논리 이름을 만들기 전에 표에 남아있는 할당량과 비교하여 해당 데이터 구조의 크기를 검사합니다. 새 항목에 사용할 수 있는 할당량이 충분하지 않으면 시스템에서 오류 메시지를 표시합니다.
한 번 표의 할당량을 설정하면 변경할 수 없습니다. 표에 여유 공간이 없으면 DEASSIGN 명령을 사용하여 이전 논리 이름을 삭제합니다. 이렇게 하면 새 논리 이름에 필요한 공간이 확보됩니다.
다음 보기에서는 논리 이름 표 ABC가 만들어지고 500바이트의 할당량이 제공됩니다.
$ CREATE/NAME_TABLE/QUOTA=500 ABC
작업 논리 이름 표는 공유 표입니다. 표가 만들어지면 작업 논리 이름 표의 할당량이 설정됩니다. 할당량은 한 개 이상의 다음 기준에 의해 결정됩니다.
시스템 사용자 인증 파일 SYSUAF.DAT의 사용자에 대해 설정된 JTQUOTA 값
(프로세스에서 활성화한 첫 번째 이미지가 시스템 이미지 LOGINOUT인 경우)
프로세스 작성($CREPRC) 시스템 서비스에 대한 호출에 지정된 PQL$_JTQUOTA 할당량 목록 값
분리된 프로세스를 만드는 데 사용된 RUN 명령의 /JOB_TABLE_QUOTA 한정자 값
SYSGEN 매개 변수 PQL_DJTQUOTA(이전 조건이 적용되지 않은 경우). 이 매개 변수의 표준 기본 값은 1024바이트이지만 시스템 관리자가 값을 변경할 수 있습니다. 매개 변수 PQL_DJTQUOTA(기본 작업 논리 이름 표 할당량)와 PQL_MJTQUOTA(최소 작업 논리 이름 표 할당량)의 값을 표시하고 설정하는 데 시스템 생성 유틸리티(SYSGEN)를 사용할 수 있습니다.
작업 논리 이름 표에 대한 할당량 값이 0이라는 것은 할당량이 없다는 의미입니다.
실용적인 모든 용도를 위해 할당량은 제한되지 않습니다.
LNM$FILE_DEV는 검색할 논리 이름 표와 모든 논리 이름 변환의 검색 순서 모두를 정의합니다. 일반적으로는 기본 검색 순서를 수정할 필요가 없습니다. 하지만 사용자가 LNM$FILE_DEV로 지정한 표 앞에서 처음으로 검색한 새 프로세스-개인 논리 이름 표의 이름을 추가해야 할 경우가 있습니다. 마찬가지로 시스템 관리자가 LNM$FILE_DEV로 지정한 표 앞에서 검색할 한 개 이상의 공유 논리 이름 표의 이름을 추가해야 할 경우가 있습니다.
시스템에서 처음으로 검색할 새 논리 이름 표를 사용하여 LNM$FILE_DEV의 프로세스-개인 정의를 만들려면 다음을 수행하십시오.
1. 새 논리 이름을 포함하는 파일을 만듭니다.
2. 이 새 파일을 새 논리 이름 표로 변환합니다.
3. 프로세스 논리 이름 디렉토리 표를 상위 표로 지정하여 LNM$FILE_DEV의 개인 정의를 만듭니다.
4. LNM$FILE_DEV의 개인 정의에 있는 표 이름 목록 시작 부분에 새 논리 이름 표 이름을 추가합니다.
다음 보기에서는 새 논리 이름 표, NEWTAB을 만들고 검색할 첫 번째 표로 나열된 NEWTAB을 사용하여 LNM$FILE_DEV의 프로세스-개인 정의를 만듭니다.
$ CREATE/NAME_TABLE NEWTAB
$ DEFINE/TABLE=LNM$PROCESS_DIRECTORY LNM$FILE_DEV -
_$ NEWTAB, LNM$PROCESS, LNM$JOB, LNM$GROUP, LNM$SYSTEM
위의 보기에서 시스템은 다음과 같은 이유로 NEWTAB 표를 먼저 검색합니다.
기본 시스템 버전 대신 LNM$FILE_DEV의 프로세스-개인 정의가 사용됩니다.
LNM$FILE_DEV 내에서 NEWTAB은 다른 논리 이름 표 앞에 나열됩니다.
새 논리 이름 표를 LNM$FILE_DEV의 시스템 정의에 추가하려면 SYSNAM 또는 SYSPRV 특권이 있어야 합니다.
다음 보기는 NEWTAB이 프로세스-개인 표가 아닌 공유 표로 작성되었다는 점만 제외하면 이전 보기와 비슷합니다.
$ CREATE/NAME_TABLE/PARENT=LNM$SYSTEM_DIRECTORY NEWTAB
$ DEFINE/TABLE=LNM$SYSTEM_DIRECTORY LNM$FILE_DEV -
_$ NEWTAB, LNM$PROCESS, LNM$JOB, LNM$GROUP, LNM$SYSTEM
또한, LNM$FILE_DEV에서 정의한 검색 목록에서 논리 이름 표를 제거할 수 있습니다. 다음 보기에서는 프로세스 및 시스템 논리 이름 표만 포함하는 LNM$FILE_DEV의 프로세스-개인 정의를 만듭니다. 프로세스-개인 정의에는 LNM$JOB과 LNM$GROUP이 포함되지 않으므로 논리 이름을 변환해야 할 후속 명령에서 작업이나 그룹 표를 검색하지 않습니다.
$ DEFINE/TABLE=LNM$PROCESS_DIRECTORY -
_$ LNM$FILE_DEV LNM$PROCESS,LNM$SYSTEM
논리 이름 표를 삭제하려면 이 표(시스템 또는 프로세스 디렉토리 논리 이름 표)를 포함하는 표 및 표 이름을 지정합니다. 상위 논리 이름 표를 삭제하면 하위 표 및 하위 표 자체의 모든 논리 이름이 삭제됩니다.
공유 논리 이름 표를 삭제하려면 표에 대한 DELETE 액세스 또는 SYSPRV 특권이 있어야 합니다.
다음 보기의 명령은 논리 이름 WORKFILE을 삭제합니다.
다음 보기의 명령은 프로세스 디렉토리 표에서 논리 이름 표 TAX를 삭제합니다.
$ DEASSIGN/TABLE=LNM$PROCESS_DIRECTORY TAX
DCL은 사용자가 로그인할 때 영구 프로세스 논리 이름을 만듭니다. 이러한 이름은 프로세스 수명 동안에 정의된 상태로 남아 있습니다. 이러한 논리 이름은 지정 취소할 수 없습니다. DEFINE 명령에서 다른 등가 문자열을 지정하여 논리 이름을 재정의할 수 있지만 재정의된 이름을 나중에 지정 취소하면 영구 프로세스 이름이 재설정됩니다.
다음 영구 프로세스 논리 이름을 사용할 수 있습니다.
기본 입력 장치나 파일을 참조하는 논리 이름입니다.
기본 출력 장치나 파일을 참조하는 논리 이름입니다.
시스템에서 메시지를 기록하는 기본 장치나 파일을 참조하는 논리 이름입니다.
로그인할 때 SYS$INPUT 값을 참조하는 논리 이름입니다.
대화형 프로세스와 일괄 처리 프로세스의 등가 이름 차이점
시스템을 대화형으로 사용하면 DCL은 SYS$INPUT, SYS$OUTPUT, SYS$ERROR 및 SYS$COMMAND를 사용자 터미널에 일치시킵니다. 하지만 명령 프로시저를 실행하고 일괄 처리 작업을 전송하면 DCL이 이러한 논리 이름에 대한 새 등가 문자열을 만듭니다.
명령 프로시저를 대화형으로 실행하면 다음이 발생합니다.
SYS$INPUT은 명령 프로시저와 일치합니다. 그러므로 DCL은 명령 프로시저에서 데이터를 가져옵니다. 이 할당은 임시적입니다. 명령 프로시저가 종료되면, SYS$INPUT은 원래 값을 다시 얻습니다.
SYS$OUTPUT, SYS$COMMAND 및 SYS$ERROR는 터미널에 일치된 상태로 남아 있습니다.
일괄 처리 작업을 전송하면 다음이 발생합니다.
SYS$INPUT 및 SYS$COMMAND는 일괄 처리 작업 명령 프로시저와 일치합니다.
SYS$OUTPUT 및 SYS$ERROR는 일괄 처리 작업 로그 파일과 일치합니다.
명령 프로시저를 중첩하는 경우(즉, 다른 명령 프로시저를 실행하는 명령 프로시저를 작성하는 경우), SYS$INPUT의 등가 문자열은 현재 실행 중인 명령 프로시저를 가리키도록 변경됩니다. 하지만 SYS$OUTPUT, SYS$ERROR 및 SYS$COMMAND의 등가 문자열은 사용자가 명시적으로 변경하지 않는 한 같은 상태로 남아 있습니다.
또한, 파일을 여는 명령을 입력하면 DCL은 이 파일을 영구 프로세스 파일로 엽니다. 예를 들어, OPEN 명령을 사용하여 파일을 열면 이 파일이 영구 프로세스 파일로 열립니다. 파일을 명시적으로 닫거나 로그아웃할 때까지 파일은 열린 상태로 남아 있습니다.
영구 프로세스 파일은 메모리의 특수 영역에 저장됩니다. 동시에 여러 파일을 열린 상태로 두면 이 영역이 모두 사용하게 될 수 있습니다. 이러한 경우 일부 파일을 닫거나 로그아웃해야 합니다.
영구 프로세스 논리 이름을 사용하여 파일 I/O 재지정
영구 프로세스 논리 이름을 사용하여 파일 I/O를 재지정할 수 있습니다. 명령 프로시저에서는 이러한 이름을 사용하여 터미널의 데이터를 읽고 데이터를 표시할 수 있습니다(
13장 및
14장 참조). DCL은 SYS$INPUT 및 SYS$COMMAND의 새 정의를 무시합니다.
OpenVMS Version 7.1에서는 DCL PIPE 명령이 사용됩니다. PIPE 명령은 파일 I/O를 재지정할 수 있는 대체 방법입니다. PIPE 명령에 대한 자세한 내용은
OpenVMS DCL Dictionary: N-Z를 참조하십시오.
SYS$INPUT을 재정의하여 명령 프로시저에서 호출한 이미지가 터미널이나 다른 파일에서 입력을 읽어들이도록 할 수 있습니다. DCL은 항상 기본 입력 스트림에서 입력을 가져오므로 DCL은 SYS$INPUT 재정의를 무시합니다.
다음 보기의 명령은 새 명령 프로시저 파일의 일부입니다. DEFINE 명령은 SYS$INPUT을 SYS$COMMAND로 재정의합니다. SYS$COMMAND는 사용자가 로그인한 경우 초기 입력 스트림인, 터미널을 참조합니다. 이 새 정의를 사용하면 명령 프로시저에서 호출한 이미지는 특정 기간 동안만 명령 프로시저 파일(기본값)이 아닌 터미널에서 입력을 가져옵니다.
/USER_MODE 한정자는 SYS$INPUT이 다음 이미지의 지속 기간 동안에만 재정의됨을 명령 프로시저에 알립니다. 이 보기에서 다음 이미지는 편집기입니다. 편집기를 종료하면 SYS$INPUT은 기본값을 계속 사용합니다. 이 경우 기본값은 명령 프로시저 파일입니다.
$ DEFINE/USER_MODE SYS$INPUT SYS$COMMAND
$ EDIT/TPU MYFILE.DAT
.
.
.
SYS$OUTPUT을 재정의하여 기본 장치에서 다른 파일로 출력을 재지정할 수 있습니다. SYS$OUTPUT을 재정의하면 시스템에서 사용자가 논리 이름 할당에 지정한 이름을 사용하여 파일을 엽니다. SYS$OUTPUT을 재정의하면 모든 후속 출력이 새 파일로 지정됩니다.
SYS$OUTPUT을 지정 취소해야 합니다. 그렇지 않으면 출력이 사용자가 지정한 파일에 계속 쓰여집니다. 사용자 모드에서 SYS$OUTPUT을 재정의하여(DEFINE/USER_MODE 사용) 이미지로부터의 출력을 재지정할 수 있습니다. 이러한 정의는 다음 명령 이미지가 실행될 때까지만 유효합니다. 한 번 명령 이미지가 실행되면 즉, 출력이 파일에서 캡쳐되면 논리 이름 SYS$OUTPUT은 해당 기본값을 계속 사용합니다.
로그인할 때 시스템에서 SYS$OUTPUT이라는 두 개의 논리 이름을 만듭니다. 한 이름이 실행 모드에서 만들어지면 다른 이름은 감독자 모드에서 만들어집니다. SYS$OUTPUT을 재정의하여 감독자 모드 논리 이름을 대체할 수 있습니다. 감독자 모드 이름을 지정 취소한 경우 시스템에서 실행 모드 등가 문자열을 사용하여 감독자 모드에서 SYS$OUTPUT을 재정의합니다. 실행 모드 이름은 지정 취소할 수 없습니다.
SYS$OUTPUT을 파일로 재정의하면 사용자가 지정한 파일로 출력이 지정되더라도 논리 이름에는 파일 지정 방법의 장치 부분만 포함됩니다.
SYS$OUTPUT을 재정의할 때 사용자가 지정하는 파일을 시스템에서 열 수 없는 경우 오류 메시지를 표시합니다.
SYS$OUTPUT을 재정의한 다음 대부분의 명령은 출력을 파일의 기존 버전으로 지정합니다. 하지만 특정 명령은 출력을 쓰기 전에 새 버전의 파일을 만듭니다.
다음 보기에서 SYS$OUTPUT은 SHOW DEVICES 명령이 입력되기 전에 MYFILE.LIS로 정의됩니다. SHOW DEVICES로 만든 표시는 터미널이 아닌 현재 디렉토리의 MYFILE.LIS로 지정됩니다. 다른 텍스트 파일을 조작하는 방식으로 데이터를 조작할 수 있습니다.
$ DEFINE SYS$OUTPUT MYFILE.LIS
$ SHOW DEVICES
다음 보기에서 SYS$OUTPUT은 TEMP.DAT 파일로 재정의됩니다. SYS$OUTPUT이 재정의되면 DCL 및 이미지의 출력은 TEMP.DAT 파일로 지정됩니다.
SHOW LOGICAL 명령과 SHOW TIME 명령의 출력도 TEMP.DAT로 보내집니다. SYS$OUTPUT이 지정 취소되면 시스템에서 파일 TEMP.DAT를 닫고 SYS$OUTPUT을 터미널로 재정의합니다. TYPE 명령이 입력되면 TEMP.DAT에 수집된 출력이 터미널에 표시됩니다.
$ DEFINE SYS$OUTPUT TEMP.DAT
$ SHOW LOGICAL SYS$OUTPUT
$ SHOW TIME
$ DEASSIGN SYS$OUTPUT
$ TYPE TEMP.DAT
"SYS$OUTPUT" = "DISK1:" (LNM$PROCESS_TABLE)
06-MAY-1996 13:26:53
SYS$OUTPUT을 재정의하면 등가 문자열은 전체 파일 지정 방법이 아닌 장치 이름 DISK1을 포함합니다.
SYS$ERROR를 재정의하여 지정한 파일로 오류 메시지를 지정할 수 있습니다. 하지만 SYS$ERROR를 재정의하는 경우 SYS$OUTPUT과 다르게 되고(또는 SYS$ERROR는 재정의하지 않고 SYS$OUTPUT만 재정의하는 경우), DCL 명령은 정보, 경고, 오류 및 심각한 오류 메시지를 SYS$ERROR와 SYS$OUTPUT 모두에 보냅니다. 그러므로 이러한 메시지를 두 번 받게 됩니다. 한 번은 SYS$ERROR 정의에서 표시한 파일에서 그리고 또 한 번은 SYS$OUTPUT에서 표시한 파일에서 받게 됩니다. 성공 메시지는 SYS$OUTPUT에서 표시한 파일에만 보내집니다.
표준 오류 표시 메커니즘을 사용하는 DCL 명령 및 이미지는 SYS$ERROR가 SYS$OUTPUT과 다르더라도 SYS$ERROR와 SYS$OUTPUT 모두에 오류 메시지를 보냅니다. 하지만 SYS$ERROR를 재정의한 다음 SYS$ERROR를 참조하는 이미지를 실행하면 해당 이미지는 SYS$ERROR에서 표시한 파일로만 오류 메시지를 보냅니다. SYS$ERROR가 SYS$OUTPUT과 다르더라도 SYS$ERROR에서 표시한 파일로만 오류 메시지를 보냅니다.
SYS$COMMAND를 재정의할 수 있지만, DCL에서는 사용자 정의를 무시합니다. DCL에서는 항상 처음 입력 스트림의 기본 정의를 사용합니다. 하지만 SYS$COMMAND를 참조하는 이미지를 실행하면 이미지에서 사용자의 새 정의를 사용할 수 있습니다.