따..딱히 공부하려고 포스팅하는 건 아니니까..!
C 표준 파일 입출력 본문
응용 프로그램은 시스템 호출을 통해 필요할 때마다 커널에 서비스를 요청할 수 있다.
BUT!! C 언어가 제공하는 라이브러리 함수를 사용할 수도 있다.
C 라이브러리 함수는 함수 내에서 관련 시스템 호출을 한다.
따라서 C 라이브러리 함수는 시스템 호출을 보다 쉽게 사용할 수 있도록 포장한 보다 높은 수준의 프로그래밍 인터페이스라고 볼 수 있다.
1. C 파일
모든 데이터를 연속된 바이트 형태로 저장한다.
저장된 데이터에 따라 텍스트 파일과 이진 파일로 구분한다.
텍스트 파일(Text File) : 문자들만으로 이루어진 파일이며, 매 줄마다 새줄문자(\n)를 포함하고 있다.
이진 파일(Binary File) : 모든 데이터를 컴퓨터 내부의 이진수 표현 그대로 저장한 파일이며,
이미지 파일이나 실행파일 등이 있다.
C언어의 파일 입출력은 시스템 호출과 거의 유사하다.
① 파일 열기 : fopen() 함수를 이용
② 파일 입출력
③ 파일 닫기 : fclose() 함수를 이용
FILE 구조체는 <stdio.h> 헤더파일에 정의 되어있으며 FILE 구조체 안에는 열린 파일을 위한 여러 필드 변수들이 선언되어 있다.
특히 버퍼 관련 변수들이 선언되어 있다. 파일 입출력 함수들은 입출력 최적화를 위해 버퍼를 사용하는데, 버퍼는 입출력의 중간에서 입출력하는 데이터를 모아두었다가 일정한 크기가 되면 한꺼번에 보내주는 역할을 한다.
< FILE 구조체의 정의 >
typedef struct
{
int cnt; // 버퍼의 남은 문자 수
unsigned char *base; // 버퍼 시작
unsigned char *ptr; // 버퍼 현재 포인터
unsigned flag; // 파일 접근 모드
int fd; // 열린 파일 디스크립터
} FILE;
2. 파일 열기
FILE fopen(const char* filename, const char *mode)
시스템에게 이제 이 파일을 사용하겠으니 준비해달라고 요청하는 과정이며, 열린 파일에 대한 정보를 FILE 구조체에 채운 다음, 이 FILE 구조체에 대한 포인터(열린 파일을 가리키는 포인터)가 반환된다.
: 지정한 파일(filename)에 대해 지정한 파일 입출력 모드(mode)로 파일 열기를 한다.
: 성공하면 열린 파일을 나타내는 FILE 포인터를 반환,
실패하면 NULL을 반환한다.
<텍스트 파일 입출력 모드>
파일 열기를 했을 때에는 파일이 열렸는지 검사하는 것이 좋다
**열기 뿐만 아니라 항상 검사하는 습관을 들이자**
3. 스트림
파일이 열린 상태이며(열린파일 = 스트림), 버퍼형 파일 입출력을 위한 논리적 인터페이스라고 할 수 있다.
즉, FILE 포인터가 스트림을 나타낸다.
<표준 입출력 스트림>
이들은 C 프로그램이 실행되면 자동적으로 열리고 종료될 떄 자동으로 닫히는 성질이 있다.
4. 파일 닫기
FILE fclose(FILE *fp) // 이미 열려있는 것을 닫는 것이므로 FILE *fp
C 프로그램은 종료될 때 자동적으로 열린 파일을 모두 닫지만 대부분의 시스템들은 한 번에 열 수 있는 파일 수를 제한하고 있기 때문에 더 이상 필요 없는 경우에는 파일을 닫아 주는 것이 좋다.
'시스템|서버|네트워크' 카테고리의 다른 글
[리눅스]프로세스 제어 (프로세스 생성) (0) | 2015.04.30 |
---|---|
vagrant와 윈도우즈 연결하기 (0) | 2015.01.14 |
[리눅스]프로세스(Process) (0) | 2014.12.09 |
파일 시스템(File System) (1) | 2014.11.26 |
시스템 호출(System Call) (0) | 2014.11.13 |