`Extended I/O specifiers` — I/O 단위를 여는 추가 사양(스펙티파이어)
Extended I/O specifiers — I/O 단위를 여는 추가 사양(스펙티파이어)
예전 코드에서 쓰던 I/O 스펙티파이어(specifier)인 CARRIAGECONTROL, READONLY, SHARE가 필요할 때가 있어요. 이들은 표준 Fortran이 아니라 GNU Fortran의 확장으로, -fdec 컴파일 플래그로 호환성을 위해 지원되는 기능이에요.
본문
GNU Fortran은 호환성을 위해 추가적인 레거시 I/O 스펙티파이어 CARRIAGECONTROL, READONLY, SHARE를 -fdec 컴파일 플래그와 함께 지원해요.
CARRIAGECONTROL
CARRIAGECONTROL 스펙티파이어는 I/O 단위의 출력 레코드 사이 줄 종료(line termination) 설정을 제어할 수 있게 해줘요. 읽기 전용(readonly) 파일에는 의미가 없어요. 형식화 쓰기용으로 단위를 열 때 CARRIAGECONTROL을 지정하면, 그 설정값에 따라 출력 레코드 사이에 어떤 문자를 쓸지가 결정돼요. 문법은:
OPEN(..., CARRIAGECONTROL=cc)
여기서 cc는 다음 값 중 하나로 평가되는 문자 표현식이에요.
| 값 | 의미 |
|---|---|
'LIST' |
레코드 사이에 줄바꿈 하나 (기본값) |
'FORTRAN' |
첫 문자의 레거시 해석 (아래 참고) |
'NONE' |
레코드 사이에 구분자 없음 |
CARRIAGECONTROL='FORTRAN'을 쓰면, 레코드를 쓸 때 입력 레코드의 첫 문자는 쓰지 않고, 대신 그 문자로 출력 레코드 구분자를 결정해요.
| 선두 문자 | 의미 | 출력 구분 문자 |
|---|---|---|
'+' |
겹쳐 쓰기(Overprinting) | 캐리지 리턴만 |
'-' |
새 줄(New line) | 줄바꿈 + 캐리지 리턴 |
'0' |
줄 건너뛰기(Skip line) | 줄바꿈 2개 + 캐리지 리턴 |
'1' |
새 페이지(New page) | 폼 피드 + 캐리지 리턴 |
'$' |
프롬프트(Prompting) | 줄바꿈 (캐리지 리턴 없음) |
CHAR(0) |
겹쳐 쓰기 (전진 없음) | 없음 |
READONLY
READONLY 스펙티파이어는 단위를 열 때 지정할 수 있어요. ACTION='READ'를 지정한 것과 동등하며, 한 가지 차이는 닫을 때 파일을 삭제할 수 없다는 점이에요 (즉 STATUS="DELETE"로 CLOSE할 수 없어요). 문법은:
OPEN(..., READONLY)
SHARE
SHARE 스펙티파이어는 여러 프로세스/스레드의 제어된 접근을 위해, 단위를 열 때 시스템 수준의 잠금(locking) 을 허용해요. SHARE 스펙티파이어에는 여러 형태가 있어요:
OPEN(..., SHARE=sh)
OPEN(..., SHARED)
OPEN(..., NOSHARED)
첫째 형태의 sh는 아래 표의 값으로 평가되는 문자 표현식이에요. 뒤의 두 형태는 특정 sh 값의 별칭(alias)이에요.
| 명시적 형태 | 짧은 형태 | 의미 |
|---|---|---|
SHARE='DENYRW' |
NOSHARED |
배타적(쓰기) 잠금 |
SHARE='DENYNONE' |
SHARED |
공유(읽기) 잠금 |
일반적으로 한 파일에 대해 배타적(쓰기) 잠금을 가질 수 있는 프로세스는 하나뿐이고, 같은 파일에 대해 공유(읽기) 잠금을 가질 수 있는 프로세스는 여러 개예요.
잠금 동작은 운영 체제에 따라 달라요. POSIX 시스템에서는 잠금이 fcntl로 구현돼요. 자세한 내용은 해당 운영 체제의 매뉴얼 페이지를 참고하세요. SHARE=를 통한 잠금은 다른 시스템에서는 지원되지 않아요.
더 알아보기
-fdec— GNU Fortran의 DEC 확장 호환 플래그- I/O 단위 열기(
OPEN) 문법