1 / 20

Chapter 2. Fundamental File Processing Operations

컴퓨터공학 장 재 우 교수. Chapter 2. Fundamental File Processing Operations. Contents. Physical Files and Logical Files Opening Files Closing Files Reading and Writing Seeking The Unix Directory Structure Physical Devices and Logical Files File-Related Header Files.

rance
Download Presentation

Chapter 2. Fundamental File Processing Operations

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 컴퓨터공학 장 재 우 교수 Chapter 2. Fundamental File Processing Operations

  2. Contents • Physical Files and Logical Files • Opening Files • Closing Files • Reading and Writing • Seeking • The Unix Directory Structure • Physical Devices and Logical Files • File-Related Header Files E-mail : jwchang@chonbuk.ac.kr

  3. 1. Physical Files and Logical Files • 물리적 화일 (Physical Files) • 디스크나 테이프 상에 있는 화일 • 논리적 화일 (Logical Files) • 운영체제(OS) 의 도움 E-mail : jwchang@chonbuk.ac.kr

  4. 2. Opening Files • 화일 열기의 Options • Opening existing file • Crete a new file • 이미 존재하는 화일 열기(open) • 화일을 프로그램에 의해 사용될 수 있도록 준비 • 시작위치는 화일의 처음으로 지정, 판독(read), 기록(write)준비 • 새로운 화일 생성(creat) • 생성 후에 화일이 사용될 준비가 된다는 점이 화일 열기와 동일 • 생성된 화일은 처음에는 내용이 없기에, 기록 연산만이 의미가 있음 E-mail : jwchang@chonbuk.ac.kr

  5. 인수 인수 인수 fd int • 화일 기술자(file descriptor) • 프로그램 내에서 화일을 가리키는 논리적 화일 식별자이고 정수형 • 실패하면 음수를 리턴 filename char * • 물리적 화일의 이름을 갖는 문자열 flags int • open() 함수의 연산을 제어 • 비트간 OR 연산을 취함 • O_APPEND, O_CREATE, O_EXCL, O_RDONLY, O_RDWR, O_TRUNC, O_WRONLY pmode int • 화일에 대한 보호 모드를 지정 Opening Files (계속) • fd = open(filename, flags[, pmode]) // fcntl.h E-mail : jwchang@chonbuk.ac.kr

  6. (file open) write write write (file close) [buffer] [저장장치] 3. Closing Files • 화일 닫기 • 화일을 닫으면, 그 논리적 화일 이름은 다른 화일을 위해 사용 가능 • 화일을 닫는 것은, 그 화일을 위한 버퍼의 데이터가 비워지고 기록한 모든 것이 화일에 기록됨을 보장 E-mail : jwchang@chonbuk.ac.kr

  7. 4. Reading and Writing • 판독, 기록 함수 • 판독과 기록은 화일 처리의 기본, 화일 처리의 입출력(I/O) 연산으로 생성 • Read(Source_file, Destination_addr, Size) • Write(Destination_file, Source_addr, Size) Source_file 읽어야 할 정보가 있는 곳 Destination_addr 입력화일에서 읽은 정보를 저장할 곳 Size 화일에 가져올 정보의 크기 Destination_file 데이터를 보내기 위해 사용되는 논리적 화일 이름 Destination_addr 보내야 할 정보가 저장되어 있는 곳 Size 기록될 바이트의 갯수 E-mail : jwchang@chonbuk.ac.kr

  8. 인수 타입 설명 file FILE * • 화일 기술자(file descriptor)에 대한 포인터 • 타입 FILE 은 struct_iobuf를 위한 또 다른 이름 filename char * • 화일 이름 type char * • 열기 함수의 연산을 제어 “r”, “w”, “a”, “r+”, “w+”, “a+” Reading and Writing (계속) • C 스트림 (stdio.h) • file = fopen(filename, type) • 판독, 기록을 위한 연산 • fread, fget, fwrite, fput • fscanf, fprintf 함수는 입출력을 형식화하는데 사용 E-mail : jwchang@chonbuk.ac.kr

  9. Reading and Writing (계속) • C++ 스트림 (iostream.h) • C++ 스트림(iostream.h) • C++에서 오버로딩 (>> (입력), << (출력)) • ostream& operator << (char c); • 예제 fstream(); // 스트림을 개방되지 않은 상태로 남겨둠 fstream(char *filename, int mode) int open(char *filename, int mode) int read(unsigned char * dest_addr, int size) int write(unsigned char *source_addr, int size) int n = 5; cout << “Value of n is “ << n << endl; E-mail : jwchang@chonbuk.ac.kr

  10. Reading and Writing (계속) • 화일의 내용을 표시해 주는 C/C++ 프로그램 • [단계 1] 입력 화일의 이름을 물어 보는 프롬프트를 화면에 표시 • [단계 2] 사용자의 응답을 키보드에서 읽어서 file_name이라는 변수에 저장 • [단계 3] 입력 화일을 연다 • [단계 4] 입력 화일에서 읽을 문자들이 있는 동안 다음 작업을 반복[단계 4.a] 화일에서 문자를 읽고[단계 4.b] 터미날 스크린에 문자들을 쓴다 • [단계 5] 입력 화일을 닫는다 E-mail : jwchang@chonbuk.ac.kr

  11. Reading and Writing (계속) • 소스 예 (C 언어) #include <stdio.h> main() { char ch; FILE *file; char filename[20]; printf(“Enter the name of the file: “); //  gets(filename); //  file = fopen(filename, “r”); //  while(fread(&ch, 1, 1, file) !=0 ) // .a fwrite(&ch, 1, 1,stdout); // .b fclose(file); //  } <그림 2.2> listc.cpp E-mail : jwchang@chonbuk.ac.kr

  12. Reading and Writing (계속) • 소스 예(C++ 언어) #include <fstream.h> main() { char ch; fstream file; char filename[20]; cout << “Enter the name of the file : “ << flush; //  출력시도 cin >> filename; //  file.open(filename, ios::in); //  file.unsetf(ios::skipws); // 판독시 공백포함 while(1) { file >> ch; // .a if(file.fail()) break; cout << ch; } // .b file.close(); //  } <그림 2.3> listcpp.cpp E-mail : jwchang@chonbuk.ac.kr

  13. Reading and Writing (계속) • 화일 끝 (end_of_file)의 탐지 • 화일 끝을 알리는 조건 • fread 호출은 값으로 읽은 원소들의 수를 리턴 • fread가 0값을 되돌려 준다면, 화일의 끝에 도달 • file.fail() 은 화일의 끝에 도달했으면, 1 (참)을 리턴 E-mail : jwchang@chonbuk.ac.kr

  14. 5. Seeking • Sequential 판독과 Random 판독 • 기록/판독 포인터가 있는 곳으로부터, 원하는 위치로 이동 가능 • 화일 내에서 특정 위치로 직접 이동하는 행위가 seeking(탐색) Seek(Source_file, Offset) Source_file Offset 탐색을 하고자 하는 논리적 화일 이름 화일의 시작으로부터 화일 포인터가 이동되기를 원하는 거리의 크기 E-mail : jwchang@chonbuk.ac.kr

  15. Seeking (계속) • C 스트림에서의 탐색 • 보조 기억장치에 저장된 매우 긴 바이트의 배열을 가정 • 탐색 : 메모리 내에 있는 바이트의 배열에서 첨자의 사용으로 어떤 임의의 바이트로 이동 #define SEEK_SET 0 #define SEEK_CUR 1 #define SEEK_END 2 long pos; fseek(FILE *file, long offset, int origin); FILE *file; … pos = fseek(file, 372L, 0); // 화일에서 안으로 372바이트 위치로 이동 E-mail : jwchang@chonbuk.ac.kr

  16. Seeking (계속) • C++ 스트림에서의 탐색 • fstream 객체는 두 개의 화일 포인터 필요 • 입력을 위한 get 포인터와 출력을 위한 put 포인터 (seekg, seekp) • 탐색 연산은 스트림 클래스의 메소드(ios::beg(화일의 시작), ios::cur(현재의 위치), ios::end(화일의 끝)) file.seekg(373, ios::beg); file.seekp(377, ios::beg); // 373 바이트까지 포인터를 get과 put으로 움직인다. E-mail : jwchang@chonbuk.ac.kr

  17. root bin usr usr6 dev adb cc yacc bin lib lib mydir consol kdb TAPE libc.a libm.c libdf.a addr dF 6. The UNIX Directory Structure • UNIX의 화일 시스템 • 모든 화일과 서브 디렉토리는, 경로명에 의해 표현되는 트리구조 “.” : 현재 디렉토리 “..” : 현재 디렉토리의 부모 E-mail : jwchang@chonbuk.ac.kr

  18. 7. Physical Devices and Logical Files • 화일로서의 물리적 장치 • UNIX 에서 화일은 바이트의 열로서, 키보드나 콘솔같은 장치도 화일로 생각 • UNIX 에서 화일이 어떤 물리적인 표현을 갖더라도, 화일에 대한 논리적인 관점은 동일 • UNIX의 화일은 논리적으로 화일 기술자라는 정수로 표현 • 키보드, 디스크화일, 자기 테이프는 모두 정수로 표현 E-mail : jwchang@chonbuk.ac.kr

  19. Physical Devices and Logical Files (계속) • 콘솔(console), 키보드(keyboard), 표준 에러 • 장치와 화일간의 이원성(duality) • 논리적화일은 fopen 호출에 의해 돌려준 정수값 • 단계3 에서 정수 값을 변수 file에 대입 • 단계4.b 에서 stdout 은 기록하고자 하는 파일로서, 콘솔을 지칭함 • stdin : 터미널의 키보드 • stderr : 에러 화일로서 보통은 콘솔 file = fopen(filename, “r”); // 단계  while(fread(&ch, 1, 1, file) !=0 ) // 단계 .a fwrite(&ch, 1, 1,stdout); // 단계 .b E-mail : jwchang@chonbuk.ac.kr

  20. 8. File-Related Header Files • C 스트림 • stdio.h • C++ 스트림 • iostream.h, fstream.h • UNIX • fcntl.h, file.h E-mail : jwchang@chonbuk.ac.kr

More Related