The BinIO 구조
The BinIO 구조
BinIO 구조는 이진 데이터(8비트 바이트)의 입출력을 제공해요. 각 I/O 연산의 의미론은 IMPERATIVE_IO 시그니처 설명에서 찾을 수 있어요. openIn과 openOut 함수는 파일 데이터를 읽고 쓰기 위한 이진 스트림을 만들 수 있게 해줘요. 특정 구현에서는 운영체제 특정 구조에서 파일을 여는 다른 방법을 제공할 수도 있어요.
출처: 문서
본문
시놉시스 (Synopsis)
signature BIN_IO
structure BinIO :> BIN_IO
인터페이스 (Interface)
include IMPERATIVE_IO
where type StreamIO.vector = Word8Vector.vector
where type StreamIO.elem = Word8.word
where type StreamIO.reader = BinPrimIO.reader
where type StreamIO.writer = BinPrimIO.writer
where type StreamIO.pos = BinPrimIO.pos
val openIn : string -> instream
val openOut : string -> outstream
val openAppend : string -> outstream
설명 (Description)
openIn name
이 함수들은 name이라는 이름의 파일을 각각 입력과 출력용으로 열어요. name이 상대 경로명이면 열리는 파일은 현재 작업 디렉터리에 따라 달라져요. openOut의 경우 파일이 없으면 만들고, 이미 있으면 길이 0으로 잘라요. 주어진 파일에 스트림을 열 수 없거나(openIn의 경우) 파일명이 존재하지 않으면 Io를 발생시켜요.
openOut name
name이라는 이름의 파일을 추가(append) 모드로 출력용으로 열어요. 없으면 만든다. 이미 있으면 현재 위치를 파일 끝으로 설정해요. 주어진 파일에 스트림을 열 수 없으면 Io를 발생시켜요. 초기 파일 위치가 끝인 것 외의 추가 속성은 시스템·구현 의존적이에요. "원자적 추가 모드"를 지원하는 운영체제(예: Unix)에서는 다른 프로세스가 동시에 파일에 쓰고 있어도 (플러시된) 각 출력 연산이 파일 끝에 추가돼요. 하지만 버퍼링 때문에 outstream에 쓰는 것은 원자적일 필요가 없어요. 즉 다른 프로세스의 출력이 스트림 라이브러리를 쓴 한 번의 쓰기 출력 사이에 끼어들 수 있어요. 다른 운영체제에서는 파일을 쓰기용으로 열면 다른 프로세스가 그 파일을 쓰기용으로 여는 것을 막기도 해요.
openAppend name
name이라는 이름의 파일을 추가(append) 모드로 출력용으로 열어요. 파일이 없으면 만들고, 이미 있으면 현재 위치를 파일 끝으로 설정해요. 주어진 파일에 스트림을 열 수 없으면 Io를 발생시켜요. 초기 파일 위치가 파일 끝인 것 외의 추가 속성은 시스템·구현 의존적이에요. 원자적 추가 모드를 지원하는 운영체제(예: Unix)에서는 다른 프로세스가 동시에 파일에 쓰고 있어도 (플러시된) 각 출력 연산이 파일 끝에 추가돼요. 하지만 버퍼링 때문에 outstream에 쓰는 것은 원자적일 필요가 없어요. 즉 스트림 라이브러리를 사용한 한 번의 쓰기 출력 사이에 다른 프로세스의 출력이 끼어들 수 있어요. 다른 운영체제에서는 파일을 쓰기용으로 열어 두면 다른 프로세스가 그 파일을 쓰기용으로 여는 것을 막기도 해요.