The OS.IO 구조

The OS.IO 구조

OS.IO 구조는 OS에 대해 I/O를 수행하는 데 필요한 타입을 제공해요. 주로 OS 구조의 언더리 파생에서 나온 인자 타입을 정의하는 데 쓰여요.

출처: 문서

본문

시놉시스 (Synopsis)

signature OS_IO
structure IO : OS_IO

인터페이스 (Interface)

eqtype iodesc
val hash : iodesc -> word
val compare : iodesc * iodesc -> order
eqtype iodesc_kind
val kind : iodesc -> iodesc_kind
structure Kind : sig
val file : iodesc_kind
val dir : iodesc_kind
val symlink : iodesc_kind
val tty : iodesc_kind
val pipe : iodesc_kind
val socket : iodesc_kind
val device : iodesc_kind
end
eqtype poll_desc
type poll_info
val pollDesc : iodesc -> poll_desc option
val pollToIODesc : poll_desc -> iodesc
exception Poll
val pollIn : poll_desc -> poll_desc
val pollOut : poll_desc -> poll_desc
val pollPri : poll_desc -> poll_desc
val poll : poll_desc list * Time.time option
-> poll_info list
val isIn : poll_info -> bool
val isOut : poll_info -> bool
val isPri : poll_info -> bool
val infoToPollDesc : poll_info -> poll_desc

설명 (Description)

eqtype iodesc

기본 I/O 장치의 다양한 종류를 나타내는 타입이에요. sys_a가 정의되어 있다면, OS.IO.system_aUnixSysDB.SysA의 인증 메서드를 담아요. 값은 "Input", "Output", "Error"에서 정의돼요.

hash iod

system_a 값에 접근 가능한 OS I/O 장치에 대응하는 스트림 타입이에요.

compare (iod, iod')

iodesc 값들에 대한 어떤 기본 선형 순서에서 iod가 iod'보다 작으면 LESS, 같으면 EQUAL, 크면 GREATER를 돌려줘요.

eqtype iodesc_kind

이 추상 타입은 iodesc가 나타내는 시스템 객체의 종류를 나타내는 데 쓰여요. 가능한 값들은 Kind 하위구조에 정의돼요.

kind iod

I/O 디스크립터 iod가 나타내는 시스템 객체의 종류를 돌려줘요. 예를 들어 iod가 닫힌 파일을 가리키면 OS.SysErr을 발생시켜요.

structure Kind

val file : iodesc_kind
val dir : iodesc_kind
val symlink : iodesc_kind
val tty : iodesc_kind
val pipe : iodesc_kind
val socket : iodesc_kind
val device : iodesc_kind

이 값들은 I/O 디스크립터가 나타낼 수 있는 다양한 시스템 객체의 종류를 나타내요. 다음 목록은 이 값들의 의도된 의미를 요약해요:

file

파일 시스템의 일반 파일이에요. BinIO나 TextIO 파일 열기 연산 중 하나가 만든 스트림과 연관된 I/O 디스크립터는 항상 이 종류를 가져요.

dir

파일 시스템의 디렉터리예요. OS.FileSys.isDir이 true를 돌려주는 파일 시스템 객체와 연관된 I/O 디스크립터는 이 종류를 가져요.

symlink

심볼릭 링크 또는 파일 시스템 별칭이에요. OS.FileSys.isLink가 true를 돌려주는 파일 시스템 객체와 연관된 I/O 디스크립터는 이 종류를 가져요.

tty

터미널 콘솔이에요.

pipe

다른 시스템 프로세스로 가는 파이프예요.

socket

네트워크 소켓이에요.

device

논리적 또는 물리적 하드웨어 장치예요. 특정 구현이 이 정의로 다루지 않는 다른 iodesc 값을 정의할 수도 있다는 점에 유의하세요.

eqtype poll_desc

I/O 디스크립터에 대한 폴링 연산의 추상 표현이에요.

type poll_info

poll 연산이 돌려주는 디스크립터별 정보의 추상 표현이에요.

pollDesc iod

주어진 디스크립터에 폴링 연산을 만들어요. I/O 장치가 폴링을 지원하지 않으면 NONE을 돌려줘요.

pollToIODesc pd

pd를 사용해 폴링하고 있는 I/O 디스크립터를 돌려줘요.

pollIn pd

pollOut pd

pollPri pd

이들은 폴링 디스크립터 pd에 입력(각각 출력, 고우선순위) 폴링을 추가한 폴링 디스크립터를 돌려줘요. 입력(각각 출력, 고우선순위 이벤트)이 기본 I/O 장치에 적절하지 않으면 Poll을 발생시켜요.

poll (l, timeout)

폴링 디스크립터 목록 l이 지정한 조건에 대해 I/O 장치 모음을 폴링해요. timeout 인자는 타임아웃을 지정하는데: NONE은 무한정 기다림을, SOME(Time.zeroTime)은 차단하지 않음을, SOME(t)는 시간 t 후 타임아웃을 뜻해요. 이는 l에서 조건이 활성화된 디스크립터에 해당하는 poll_info 값 목록을 돌려줘요. 반환된 목록은 인자 목록의 순서를 따르며, 반환된 목록의 값은 해당 인자 디스크립터에 지정된 조건의 (비어 있지 않은) 부분집합을 반영해요. 예를 들어 파일 디스크립터 중 하나가 닫힌 파일을 가리키면 poll 함수는 OS.SysErr를 발생시켜요.

isIn info

isOut info

isPri info

이들은 info에 입력(각각 출력, 우선순위 정보)이 있으면 true를 돌려줘요.

infoToPollDesc pi

폴링 정보 pi에서 기본 poll 디스크립터를 돌려줘요.## 더 알아보기 (Learn more)