GnuSmalltalkUsersGuide:BaseChapter 073

From 흡혈양파의 번역工房
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
FileDescriptor

FileDescriptor

네임스페이스 Smalltalk에 정의됨

슈퍼클래스: Stream

범주: 스트림-파일


"나의 인스턴스들은 일반적인 프로그래머가 파일로 생각하는 것이다. 나의 인스턴스 생성 메서드들은 디스크 파일의(또는 UNIX 에서 /dev/rmt0 혹은 VMS에서 MTA0: 와 같이 명명된 파일 객체의) 이름을 허용한다. 사실상 그들은 아카이브로부터 파일을 투명하게 추출 또는 압축해제하거나 파일에 임시 프로세싱을 실행할 때 사용 가능한 'configure.gz#ugz' 와 같은 가상 파일시스템 경로를 허용한다.


FileDescriptor 클래스: 초기화

initialize

수신자의 클래스 변수를 초기화하라.

update: aspect

종료하기 전에 열린 파일을 닫아라.


FileDescriptor 클래스: 인스턴스 생성

append

쓰기 작업을 위해 열어라. 존재하지 않을 경우 파일이 생성된다. 스트림은 파일 젤 끝에 위치된다.

create

읽기와 쓰기를 위해 열어라. 존재하지 않을 경우 파일이 생성되는데, 그 외의 경우는 절단(truncated)된다. 스트림은 파일의 시작에 위치한다.

fopen: fileName mode: fileMode

요구되는 모드 - #append, #create, #readWrite, #read 또는 #write를 이용해 응답된 - 에서 fileName을 열어라. 파일을 열 수 없는 경우 실패한다. 그 외의 경우는 새 FileStream을 응답하라. 모드는 표준 C non-binary fopen 모드라면 어느 것이든 사용 가능하다. 객체가 더 이상 참조되지 않은 경우 GC에서 파일이 자동으로 닫히겠지만 용무가 끝나면 #close를 이용해 닫는 편이 낫다. 어떤 참조도 존재하지 않을 때에도 파일을 열어두려면 파일로 #removeToBeFinalized를 전송하라.

fopen: fileName mode: fileMode ifFail: aBlock

요구되는 모드 - #append, #create, #readWrite, #read 또는 #write를 이용해 응답된 - 로 fileName을 열어라. 파일을 열 수 없는 경우 실패한다. 그 외의 경우는 새 FileStream을 응답하라. 모드는 표준 C non-binary fopen 모드는 어느 것이든 사용 가능하다.(영문장이 이상하게 끝나는데 우선은 바로 위의 문단에 적힌 문장과 똑같이 번역해두었습니다. use any The file 이 부분 확인해주세요.) 객체가 더 이상 참조되지 않은 경우 GC에서 파일이 자동으로 닫히겠지만 용무가 끝나면 #close를 이용해 닫는 편이 낫다. 어떤 참조도 존재하지 않을 때에도 파일을 열어두려면 파일로 #removeToBeFinalized를 전송하라. on: fd 주어진 파일 기술자에서 FileDescriptor를 열어라. 읽기-쓰기 접근을 가정한다.

open: fileName

fileName을 읽기-쓰기 모드로 열어라 - 파일을 열 수 없는 경우 실패한다. 그 외의 경우는 새 FileStream을 응답하라. 객체가 더 이상 참조되지 않은 경우 GC에서 파일이 자동으로 닫히겠지만 용무가 끝나면 #close를 이용해 닫는 편이 낫다. 어떤 참조도 존재하지 않을 때에도 파일을 열어두려면 파일로 #removeToBeFinalized를 전송하라.

open: fileName mode: fileMode ifFail: aBlock

요구되는 모드 - #append, #create, #readWrite, #read 또는 #write를 이용해 응답된 - 로 fileName을 열어라. 파일을 열 수 없는 경우 aBlock을 평가하라. 그 외의 경우는 수신자의 새 인스턴스를 응답하라. 모드는 표준 C non-binary fopen 모드라면 어느 것이든 사용 가능하다. fileName은 '가상 파일시스템' 경로가 될 수 있는데, 이 경로는 가상 파일시스템 레이어에 의해 검사되고 이후 파일의 un-gzipping이나 아카이로부터 파일 추출하기와 같은 작업으로 대체되는 '#' 접두사와 URLs를 포함한다.

객체가 더 이상 참조되지 않은 경우 GC에서 파일이 자동으로 닫히겠지만 용무가 끝나면 #close를 이용해 닫는 편이 낫다. 어떤 참조도 존재하지 않을 때에도 파일을 열어두려면 파일로 #removeToBeFinalized를 전송하라.

openTemporaryFile: baseName

baseName으로 시작해서 6자리 무작위 영숫자 문자로 된 이름의 파일을 작성하기 위해 열어라. 파일은 대부분의 운영체제에서 읽기/쓰기 모드와 권한 0666 또는 0600으로 생성된다 (이전 행위는 보안 문제가 될 수도 있다). 파일은 O_EXCL 플래그로 열리고, 메서드가 성공적으로 리턴하면 우리가 유일한 사용자가 되도록 보장한다.

popen: commandName dir: direction

주어진 명령에 파이프를 열고, 파일을 열 수 없는 경우 실패한다. 그 외의 경우는 새 FileStream을 응답하라. 객체가 더 이상 참조되지 않는다 하더라도 파이프는 GC에서 자동으로 닫힐 것인데, 파이프를 닫으면 연관된 프로세스가 종료되길 기다려야 하기 때문이다. direction은 #read 또는 #write('r' 또는 'w')에 의해 리턴되고, 스몰토크의 관점에서 해석된다: 읽기란 스몰토크가 명령의 표준 출력을 읽음을 의미하고, 쓰기란 스몰토크가 명령의 표준 입력을 쓴다는 것을 의미한다. 다른 채널(읽을 땐 stdin, 쓸 때는 stdout)은 commandName이 수정하지 않는 한 GST의 것과 동일하다.

popen: commandName dir: direction ifFail: aBlock

주어진 명령에 파이프를 열고, 파일을 열 수 없는 경우 aBlock을 평가하라. 그 외의 경우는 새 FileStream을 응답하라. 객체가 더 이상 참조되지 않는다 하더라도 파이프는 GC에서 자동으로 닫힐 것인데, 파이프를 닫으면 연관된 프로세스가 종료되길 기다려야 하기 때문이다. direction은 스몰토크의 관점에서 해석된다: 읽기란 스몰토크가 명령의 표준 출력을 읽음을 의미하고, 쓰기란 스몰토크가 명령의 표준 입력을 쓴다는 것을 의미한다.

read

텍스트 파일을 읽도록 열어라. 스트림은 파일의 처음에 위치한다.

readWrite

읽기와 쓰기를 위해 열어라. 스트림은 파일의 처음에 위치한다.

write

파일을 0의 길이로 줄이거나 쓰기를 위한 텍스트 파일을 생성하라. 스트림은 파일의 처음에 위치한다.


FileDescriptor 클래스: 아직 분류되지 않음

open: fileName mode: fileMode

요구되는 모드 - #append, #create, #readWrite, #read 또는 #write를 이용해 응답된 - 로 fileName을 열어라. 파일을 열 수 없는 경우 실패한다. 그 외의 경우는 새 FileStream을 응답하라. 모드는 표준 C non-binary fopen 모드라면 어느 것이든 사용 가능하다. fileName은 '가상 파일시스템' 경로가 될 수 있는데, 이 경로는 가상 파일시스템 레이어에 의해 검사되고 이후 파일의 un-gzipping이나 아카이로부터 파일 추출하기와 같은 작업으로 대체되는 '#' 접두사와 URLs를 포함한다.

객체가 더 이상 참조되지 않은 경우 GC에서 파일이 자동으로 닫히겠지만 용무가 끝나면 #close를 이용해 닫는 편이 낫다. 어떤 참조도 존재하지 않을 때에도 파일을 열어두려면 파일로 #removeToBeFinalized를 전송하라.


FileDescriptor: 접근하기

canRead

파일이 열려 있고 그로부터 읽을 수 있는지를 응답하라.

canWrite

파일이 열려 있고 그로부터 쓸 수 있는지를 응답하라.

ensureReadable

파일이 열려 있는 경우 데이터를 읽을 수 있을 때까지 기다려라. 이는 다른 Process들이 실행되도록 해준다.

ensureWriteable

파일이 열려 있는 경우 데이터를 쓸 수 있을 때까지 기다려라. 이는 다른 Process들이 실행되도록 해준다.

exceptionalCondition

파일이 열려 있고 해당 파일에서 예외 조건이 발생했는지 (예: 대역 외 데이터의 존재) 응답하라.

fd

파일의 OS 파일 기술자를 리턴하라.

file

파일명을 리턴하라.

isOpen

파일이 여전히 열려 있는지 응답하라.

isPeerAlive

소켓과 호환성을 위해 존재한다. 파일의 경우 파일이 여전히 열려 있는지를 응답한다.

isPipe

파일이 파이프인지 아니면 실제 디스크 파일에 있는지 응답하라.

name

파일명을 리턴하라.

waitForException

파일이 열려 있고 해당 파일에서 예외 조건이 발생했는지 (예: 대역 외 데이터의 존재) 응답하라. 이는 다른 Process들이 실행되도록 해준다.


FileDescriptor: 기본

checkError

오류 검사를 실행하라. 기본적으로 우리는 File class>>#checkError를 호출한다.

close

파일을 닫아라.

contents

파일의 전체 내용을 응답하라.

copyFrom: from to: to

두 개의 주어진 위치 사이에 있는 파일 내용을 응답하라.

finalize

객체가 쓰레기가 되는 시점까지 파일이 열려 있다면 파일을 닫아라.

invalidate

파일 기술자를 무효화(invalidate)하라.

next

파일에서 다음(next) 문자를 리턴하고, eof의 경우 nil을 리턴하라.

nextByte

파일에서 다음(next) 바이트를 리턴하고, eof의 경우 nil을 리턴하라.

nextPut: aCharacter

파일에 aCharacter를 보관하라.

nextPutByteArray: aByteArray

파일에 aByteArray를 보관하라.

peek

포인터를 움직이지 않고 스트림의 다음 요소를 리턴하라. 스트림의 끝에 있는 경우 nil을 리턴하라.

peekFor: anObject

스트림의 다음 요소가 anObject와 같은지 리턴하되 같지 않더라도 포인터를 이동하지 말라.

position

파일의 시작지점부터 0에서 시작하는(zero-based) 위치를 응답하라.

position: n

파일 포인터를 0에서 시작하는(zero-based) 위치 n으로 설정하라.

reset

스트림을 그 시작으로 리셋하라.

shutdown

양방향(full-duplex) 연결의 전송측면(transmission side)을 닫아라. Readwrite 파이프에 유용하다.

size

파일의 현재 크기를 바이트로 리턴하라.

truncate

파일을 현재 위치에서 절단하라.


FileDescriptor: binary I/O

nextByteArray: numBytes

바이트 배열에서 다음(next) numBytes 바이트를 리턴하라.

nextDouble

바이트 배열에서 다음 64-bit float를 리턴하라.

nextFloat

바이트 배열에서 다음 32-bit float를 리턴하라.

nextLong

바이트 배열에서 32 bit signed int로 번역된 다음(next) 4 바이트를 리턴하라.

nextLongLong

바이트 배열에서 64 bit signed int로 번역된 다음(next) 8 바이트를 리턴하라.

nextPutByte: anInteger

anInteger (범위: -128..255)를 바이트 배열에 보관하라.

nextPutDouble: aDouble

aDouble 을 바이트 배열에 64-bit float 로 보관하라.

nextPutFloat: aFloat

바이트 배열에서 다음 32-bit float를 리턴하라.

nextPutInt64: anInteger

anInteger (범위: -2^63..2^64-1)를 바이트 배열에 4 바이트로 보관하라.

nextPutLong: anInteger

anInteger (범위: -2^31..2^32-1)를 바이트 배열에 4 바이트로 보관하라.

nextPutShort: anInteger

anInteger (범위: -32768..65535)를 바이트 배열에 2 바이트로 보관하라.

nextShort

바이트 배열에서 16 bit signed int로 해석된 다음 2 바이트를 리턴하라.

nextSignedByte

바이트 배열에서 8 bit signed number로 해석된 다음 바이트를 리턴하라.

nextUint64

배열에서 64 bit unsigned int로 해석된 다음 8 바이트를 리턴하라.

nextUlong

바이트 배열에서 32 bit unsigned int로 번역된 다음 4 바이트를 리턴하라.

nextUshort

바이트 배열에서 16 bit unsigned int로 번역된 다음 2 바이트를 리턴하라.


FileDescriptor: built-ins

fileIn

수신자의 내용을 file in하라. File in 조작 중에는 아직 선언되지 않은 전역 변수는 (대문자로 시작) '알려지지 않은 변수' 오류를 발생시키지 않는다. 대신 'Undeclared' dictionary(스몰토크에 상주하는 전역 변수)에 nil로 정의된다. 변수를 네임스페이스로 추가하는 즉시(예: 클래스를 생성함으로써) Association이 Undeclared로부터 제거되고 네임스페이스에서 재사용되어 오래된 참조가 자동으로 새 값을 가리킬 것이다.

fileOp: ioFuncIndex

Private - FileStream에 의해 사용되는 프리미티브의 수를 제한하기 위해 사용된다.

fileOp: ioFuncIndex ifFail: aBlock

Private - FileStream에 의해 사용되는 프리미티브의 수를 제한하기 위해 사용된다.

fileOp: ioFuncIndex with: arg1

Private - FileStream에 의해 사용되는 프리미티브의 수를 제한하기 위해 사용된다.

fileOp: ioFuncIndex with: arg1 ifFail: aBlock

Private - FileStream에 의해 사용되는 프리미티브의 수를 제한하기 위해 사용된다.

fileOp: ioFuncIndex with: arg1 with: arg2

Private - FileStream에 의해 사용되는 프리미티브의 수를 제한하기 위해 사용된다.

fileOp: ioFuncIndex with: arg1 with: arg2 ifFail: aBlock

Private - FileStream에 의해 사용되는 프리미티브의 수를 제한하기 위해 사용된다.

fileOp: ioFuncIndex with: arg1 with: arg2 with: arg3

Private - FileStream에 의해 사용되는 프리미티브의 수를 제한하기 위해 사용된다.

fileOp: ioFuncIndex with: arg1 with: arg2 with: arg3 ifFail: aBlock

Private - FileStream에 의해 사용되는 프리미티브의 수를 제한하기 위해 사용된다.

fileOp: ioFuncIndex with: arg1 with: arg2 with: arg3 with: arg4

Private - FileStream에 의해 사용되는 프리미티브의 수를 제한하기 위해 사용된다.

fileOp: ioFuncIndex with: arg1 with: arg2 with: arg3 with: arg4 ifFail: aBlock

Private - FileStream에 의해 사용되는 프리미티브의 수를 제한하기 위해 사용된다.


FileDescriptor: 클래스 타입 메서드

isBinary

우리는 문자를 응답하므로 false를 응답하라.

isExternalStream

우리는 외부 개체(파일)에 스트리밍하므로 true를 응답하라.

isText

우리는 문자를 응답하므로 true를 응답하라.


FileDescriptor: initialize-release

addToBeFinalized

열린 파일 리스트에 나를 추가하라.

initialize

수신자의 인스턴스 변수를 초기화하라.

readStream

myself를 응답하거나 읽기가 강제 유형 변환(coerced)된 대체 스트림(alternate stream)을 응답하라.

removeToBeFinalized

열린 파일 리스트에서 나를 제거하라.


FileDescriptor: 저수준 접근

next: n putAll: aCollection startingAt: position

파일 내 제공된 aCollection 범위에 문자를 넣어라.

nextAvailable: n into: aCollection startingAt: position

버퍼링은 모두 무시하고 주어진 aCollection 범위를 파일의 내용으로 채워라.


FileDescriptor: 상속된 메서드 오버라이드하기

isEmpty

수신자가 비어 있는지 응답하라.

nextPutAllOn: aStream

수신자의 문자를 모두 aStream에 넣어라.

reverseContents

마지막 바이트부터 첫 바이트까지 파일 내용을 리턴하라.

setToEnd

파일 포인터를 파일 끝으로 리셋하라.

skip: anInteger

파일에서 anInteger 바이트를 건너뛰어라.


FileDescriptor: 다형성

pastEnd

스트림의 끝에 도달하였다. Notification를 시그널링하라.


FileDescriptor: 위치 지정하기(positioning)

isPositionable

스트림이 #skip: 을 이용한 뒤로 이동(moving backwards)을 지원하는 경우 true를 응답하라.


FileDescriptor: 출력하기

printOn: aStream

수신자의 표현을 aStream 상에 인쇄하라.


FileDescriptor: 검사하기

atEnd

데이터가 끝에 도달했는지 응답하라.


Notes