2022. 5. 10. 12:25ㆍ학교수업
UNIX 파일 - 모든 데이터를 연속된 바이트 형태로 저장
C파일 종류
1) 텍스트 파일 (text)
- 읽을 수 있는 문자를저장
- 텍스트 파일에서 한 줄의 끝을 나타내는 새줄 문자가 읽혀질 때 C 내부 방식에 의거 변환
2) 이진 파일 (binary)
- 모든 데이터는 있는 그대로 바이트의 연속으로 저장
- ex) 실행 파일, 이미지
저수준 파일 입출력
- 파일 지시자 int fd;
특징 : 빠름, 바이트 단위로 읽고 쓴다, 특수 파일에 접근 가능, 추가 작업 필요
예시 함수 : open, close, read, write, dup, fcntl, lseek,..... 등
고수준 파일 입출력(C 표준 입출력 라이브러리)
- 파일 지시자 FILE* fd;
특징 : 사용이 편하다, 버퍼 단위로 읽고 쓴다, 다양한 형식 기반 입출력 지원, 데이터 입출력 동기화 가능, C언어의 표준 함수로 제공
예시 함수 : fopen, fclose, fread, fwrite, fputs, fgets, fprintf, ....등등
파일 열기
- 파일 사용을 위해 사용해야한다.
- 파일 열기하면 FILE 구조체에 대한 포인터 반환
-> fopen()함수 사용 -> FILE 포인터(FILE*) 반환
- FILE 포인터는 열린 파일을 나타낸다.
표준 I/O 스트림
- 프로그램이 시작되면 자동으로 open되는 스트링
표준 입출력 포인터 stdin, stdout, stderr
표준 입출력 함수 vs 파일 입출력함수
보통 f를 붙여서 구분한다.
ex) getchar() -> fgetc() / scanf() -> fscanf()
기타 파일 관련 함수
1. feof -> 파일 포인터 fp가 EOF를 탐지하면 0이 아닌값 반환, 그렇지 않다면 0 반환
2. ungetc -> c에 저장된 문자를 입력 스트림에 반납, 문자를 읽지 않은 것처럼 파일 위치 포인터 1감소
3. fflush -> 아직 파일 fp에 기록되지 않고 버퍼에 남은 데이터를 fp가 가리키는 출력 파일로 내보냄
=> 버퍼 비우기 가능
블록 입출력 : 어떤 자료형의 데이터이든 그 데이터를 연속된 바이트로 해석하여 파일에 저장
-> 파일 저장된 데이터를 연속된 바이트 형태로 읽어 원래 변수에 순서대로 저장하여 원 데이터 복원
순차 접근 : 지금까지 입출력 함수는 모두 파일의 처음부터 시작하여 차례로 읽음
-> 파일 끝 만나면 동작 멈춤
-> 단점 : 파일이 크고, 작업 위치가 임의의 지점에 위치한 경우 불편
임의 접근 : 파일내 위치에 관계없이 원하는 지점으로 곧바로 이동
-> fseek함수로 원하는 지점이동
-> 이진 파일로 열어야한다.
파일 위치 관련 함수
fseek -> 파일 위치 포인터를 임의로 설정할 수 있는 함수 lseek와 비슷
rewind -> 현재파일 위치를 파일 처음으로 재위치
ftell -> 파일내 현재 파일 위치를 나타내는 파일 위치포인터 값 반환
C 라이브러리 버퍼 : 파일 입출력시 디스크 I/O수행 횟수를 최소화
- 최적의 크기 단위로 I/O수행
-> 입출력시 매번 기억장치에 엑세스하면 속도면에서나 효율성이 떨어진다.
=> 버퍼에 미리 저장해놓고 꺼내 쓴다.(속도 증가, 효율 증가)
C 라이브러리 버퍼 방식
1. 완전 버퍼 방식 : 버퍼크기 = 디스크 블록 크기(버퍼가 꽉 찼을 때 디스크 I/O수행
2. 줄 버퍼 방식 : 새줄 문자 들어올 때 디스크 I/O 수행
3. 버퍼 미사용 방식 : 버퍼 사용 X (시급한 출력의 경우)
setvbuf함수 mode
1) 완전 버퍼 : _IOFBF
2) 줄 버퍼 : _IOLBF
3) 버퍼 미사용 : _IONBF
'학교수업' 카테고리의 다른 글
컴퓨터그래픽스기초 9주차 (0) | 2022.05.11 |
---|---|
인공지능개론 9주차 (0) | 2022.05.10 |
UNIX 9주차 (0) | 2022.05.10 |
게임공학개론 10주차 (0) | 2022.05.09 |
컴퓨터 그래픽스 8주차 (0) | 2022.05.04 |