본문으로 이동

미디어위키 1.45 안정화가 거의 끝났습니다. 다만 Flow 확장 기능 관련 이슈가 있어서 대체하는 작업을 수행할 계획입니다.

  1. 큰숲백과:청사진에서 위키 발전의 대략적인 방향성을 제시했습니다. 의견이 있으신 분은 큰숲백과토론:청사진에서 의견을 남겨주시면 좋겠습니다.
  2. 기능상의 오류로 지원하지 않고 있는 기능에 대해서는 큰숲백과토론:이슈 트래커에 요약했습니다. 참고하시기 바랍니다.
  3. 데이터베이스 덤프 받고싶으신 분은 큰숲백과 가입 후에 사용자토론:Bigforest에 의견 남겨주시면 ftp 주소, 계정, 비밀번호를 특수:EmailUser를 통해서 공개할 예정입니다.

작은숲:위키노트/초보자를 위한 C 언어 강의/파일 스트림

큰숲백과, 나무를 보지 말고 큰 숲을 보라.

파일 입출력이란, 키보드 통해 입력 받을 내용을 파일을 통해 입력 받고 화면을 통해 출력할 내용을 파일에 출력하는 방법을 이야기한다. 정확히 말하자면, 키보드를 통해서 입력을 받으나 파일을 입력을 받으나 똑같은 것이다. 하지만 지금까지 우리는 기본적인 표준입출력 장치를 이용해서 입출력을 해왔으므로 이런 것을 생각할 필요가 없었다. 파일 입출력을 공부하기 앞서, 파일과 표준 입출력 장치가 결국은 같은 개념이라는 것을 이해해야 한다. 컴퓨터에서는 여러 물리 장치들을 통해 입출력을 하는데 있어 편리함과 일관성을 제공하기 위해 '스트림(stream)'이라는 개념을 사용한다. 이 '스트림'이라는 것은 하나의 프로그램이 물리적 장치를 통해 입출력할 때 중간에서 매개체 역할을 해준다. 이렇게 중간에서 매개체 역활을 해준다는 것은 아주 중요한 개념이다. 만약 이런 중간 매개체, 즉 '스트림'이라는 것이 없다면 우리가 일일히 키보드를 조작해야 하고, 모니터를 조작해야 하며, 파일을 조작해야 할 것이다. 하지만, 이 스트림을 통해 입출력을 함으로서 우리는 이런 물리적인 장치를 제어하는 것까지 신경 쓰지 않아도 된다. 우리는 단지 스트림에게 "어떤 장치에 이러한 내용을 써라"라고 명령을 하면 스트림이 알아서 적절하게 그 내용을 출력해 준다. 이렇게 스트림이라는 것은 프로그래머들이 편하게 프로그래밍을 할 수 있도록 도와준다. 그리고 일관성을 제공해준다. 여기서 일관성이라는 것은 어떤 물리적 장치에 출력을 하든지 똑같은 형식으로, 즉 하나의 함수로 사용을 할 수 있다는 것이다. 이것은 상당히 편리한 점이다. 만약 화면에 출력할 때와 파일에 출력할 때 다른 함수를 사용해야 한다면 조금 불편할 것이다. 이제 스트림의 개념을 알았으니, 컴퓨터에서 스트림을 통해 다루는 것이 어떤 것이 있는지 알아보도록 하자. 위에서도 말했지만, 거의 모든 입출력에 관련된 물리 장치들을 스트림을 통해 다루게 된다. 키보드(표준 입력), 모니터(표준 출력), 프린터, 마우스, 파일 등을 스트림을 통해서 다루게 된다. 여기에서 중요한 것은 파일이나 키보드나 모니터나 스트림 입장에서 보면 다 똑같다는 것이다. 즉 우리가 화면에 출력하는 것이나 파일에 출력하는 것이나 별 다를 게 없다는 말이 된다. 이러한 장치들을 스트림을 통해 다루기 위해서는 먼저 하나의 스트림을 열어서 그것을 그 물리적 장치에 연결해야 한다. 이렇게 장치를 스트림에 연결하기 위해 우리는 파일 포인터(file pointer) 혹은 스트림 포인터(stream pointer)를 이용한다. 개인적으로는 파일 포인터라는 말보다는 스트림 포인터라는 말을 사용한다. 이건 개인적인 의견이고 아마 일반적인 책을 보면 '파일 포인터'라는 말을 많이 사용할 것이다. 스트림을 통해 입출력할 때에는 먼저 해당 스트림을 열어야 한다. 이 말은 노트에 어떤 내용을 쓸 때를 생각해 보면 될 것이다. 노트에 어떤 내용을 쓰기 위해서는 먼저 노트를 펼쳐야 합니다. 그런 다음 쓰고, 다 쓰고 나면 덮어야 한다. 정리해보면,

  1. 스트림 포인터(stream pointer, 혹은 파일 포인터)를 선언한다.
  2. 파일(혹은 물리적 장치)를 열어 선언해놓은 스트림 포인터에 연결한다.
  3. 원하는 작업(입력 혹은 출력)을 한다.
  4. 스트림을 닫는다.

위에서 말했던 표준 입출력 장치들, 키보드, 모니터 등은 아주 빈번하게 여러 프로그램에서 사용된다. 따라서 이런 표준 입출력 장치들은 운영체제에서 미리 열어둔다. 즉, 우리가 따라 열어주지 않아도 이미 열려있다는 말이다. 또 이러한 것들은 운영체제에서 알아서 닫아주기 때문에 우리가 닫아줄 필요도 없다. 지금까지 우리는 아무런 의심도 없이 출력 함수를 통해 화면에 출력하고, 입력 함수를 통해 키보드에서 값을 읽어왔다. 그게 가능한 이유가 이미 이러한 스트림들이 열려있기 때문이다. 만약 열려있지 않다면 열어줘야 읽거나 쓸 수가 있다. 이런 표준 입출력 장치에 대한 스트림으로는 stdin, stdout, stdprn, stderr, stdaux 이렇게 다섯 개의 장치가 열려있다. 이러한 장치들은 우리가 신경 쓰지 않아도 알아서 열리는 스트림이므로 크게 신경 쓸 필요는 없다. 하지만, 파일에 어떤 내용을 쓰거나 읽어오기 위해서는 이 파일을 열어야 한다. 그래야 우리가 원하는 작업을 할 수 있다.

이 작은숲 문서의 출처는 위키노트의 위키노트: 문서입니다.