27.08.2015 Views

리눅스 시스템 프로그래밍-미리보기

커널과 C 라이브러리로 풀어가는(개정2판) 로버트 러브 저/김영근 역 | 한빛미디어 | 2015년 01월 35,000원

커널과 C 라이브러리로 풀어가는(개정2판)
로버트 러브 저/김영근 역 | 한빛미디어 | 2015년 01월
35,000원

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

하지 않는다. VMS나 다른 운영체제에서는 레코드 같은 개념을 지원하는 고도화된 자료구조를<br />

제공하지만 <strong>리눅스</strong>는 그렇지 않다.<br />

파일은 바이트를 읽고 쓰는 것이 가능하다. 이런 작업은 파일 내부의 위치를 지정해서 수행할<br />

수 있는데, 이 위치는 파일 오프셋 file offset 혹은 파일 위치 file position 라고 한다. 파일 오프셋은 커널<br />

이 열린 파일마다 유지하는 메타데이터의 핵심이다. 파일이 처음 열리면 파일 오프셋은 0이다.<br />

보통 파일은 바이트 단위로 읽고 쓰기 때문에 파일 오프셋 역시 바이트 단위로 증가하거나 감<br />

소한다. 직접 파일 오프셋을 지정할 수도 있는데 파일 끝을 넘길 수도 있다. 파일의 끝을 넘어<br />

서는 위치에 바이트를 기록하면 파일 끝에서부터 지정한 위치까지의 내용은 0으로 채워진다.<br />

이렇게 파일의 끝을 넘어서는 위치에 데이터를 기록할 수는 있지만, 파일의 시작 위치보다 앞<br />

선 위치에 데이터를 기록하는 것은 불가능하다. 그렇지만, 실제로는 이런 식으로 파일의 시작<br />

위치보다 앞선 위치에 데이터를 기록하는 일은 거의 없다. 파일 오프셋은 0부터 시작하며 음수<br />

값이 될 수 없다. 파일 중간에 데이터를 기록하면 전에 있던 데이터를 덮어쓴다. 따라서 파일<br />

중간에 데이터를 쓰는 방법으로 파일을 확장하는 것은 불가능하다. 파일을 쓰는 작업 대부분은<br />

파일 끝에서 일어난다. 파일 오프셋의 최댓값은 이 오프셋을 저장하기 위해 사용하는 C 타입의<br />

크기로 결정되며 최신 <strong>리눅스</strong> <strong>시스템</strong>에서는 64비트 값이다.<br />

파일 크기는 바이트 단위로 측정되는데 이를 파일 길이라고 한다. 다시 말하자면 길이는 단순<br />

히 파일을 구성하는 바이트 배열의 크기다. 파일 길이는 잘라내기 truncation 연산을 통해 변경할<br />

수 있다. 파일은 원래 크기보다 더 작은 사이즈로 잘라낼 수 있으며 이때 파일 끝에서 잘라낼<br />

크기만큼의 바이트를 제거한다. 이름 때문에 헷갈릴 수 있는데, 잘라내기 연산을 통해 원래 크<br />

기보다 더 큰 크기로 자르는 것도 가능하다. 이 경우 파일 끝에 추가되는 새로운 데이터는 0으<br />

로 채워진다. 빈 파일(길이가 0인)을 만들 수도 있으며 이때는 아무런 데이터도 포함하지 않는<br />

다. 최대 파일 길이는 최대 파일 오프셋 값과 동일하며 커널에서 파일을 관리하기 위해 사용하<br />

는 C 타입의 크기로 제한된다. 하지만 일부 파일<strong>시스템</strong>에서는 이보다 더 작은 크기로 최대 길<br />

이를 제약하는 경우도 있다.<br />

하나의 파일은 다른 프로세스나 심지어 동일한 프로세스에서 한 번 이상 열 수 있다. 파일은 열<br />

릴 때마다 고유한 파일 디스크립터를 반환한다. 반대로, 프로세스에서는 파일 디스크립터를 공<br />

유할 수 있다. 하나의 파일 디스크립터는 하나 이상의 프로세스에서 사용될 수 있다. 커널은 파<br />

일에 대한 동시 접근을 막지 않는다. 여러 개의 프로세스에서 동시에 같은 파일을 읽거나 쓰는<br />

1장 핵심 개념 소개<br />

43

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!