날마다 새롭게 또 날마다 새롭게

표준 입출력과 버퍼 본문

프로그래밍/C / C++

표준 입출력과 버퍼

아무유 2012. 1. 3. 20:45
 데이터 입력과 출력에는 스트림과 버퍼를 사용한다. 스트림은 시스템과 입출력 장치를 연결하는 통로이고 버퍼는 스트림을 통해 이동하는 데이터들의 임시 저장 공간이다. 데이터를 전송할 때 목적지로 바로 보내는 것이 아니라, 버퍼에 임시로 저장해 두고 데이터가 어느 정도 채워 지면 한꺼번에 데이터를 전송하게 된다. 이렇게 스트림과 버퍼로 데이터 전송보다 상대적으로 중요한 작업들을 수행하여 작업 처리의 효율을 높일 수 있다.


■ fread 함수
 
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );

스트림에서 (size) * (count) 크기의 데이터블록을 읽어와 ptr에 입력한다. 이 함수의 리턴값은 읽어들인 데이터의 개수이다. 
※ 스트림 : 파일의 읽기 및 쓰기에 대한 데이터의 흐름 
buffer = (char*) malloc (sizeof(char)*lSize);
result = fread (buffer,1,lSize,pFile); 
pFile에서 1byte 크기의 데이터를 ISize개수 만큼을 읽어 buffer에 집어넣는다. 

■ fopen함수
파일을 개방하기 위해 호출하는 함수
 
FLIE* f = fopen(const char * filename, const char * mode)
 
파일 접근 모드
r : 파일을 읽기 위해서 개방한다.
w : 데이터를 쓰기 위해서 개방한다.
a : w 모드와 달리, 지정해 준 파일이 존재하면 데이터를 지우지 않고 파일의 끝에서부터 데이터를 추가한다.
r+ : 파일을 읽고 쓰기 위해 개방한다. ( 파일이 존재할 경우 파일의 데이터를 덮어쓴다.)
w+: r+ 모드와 달리 지정해 준 파일이 존재하면 모든 데이터를 지워버리고 기록한다.
a+: r+ 모드와 달리, 지정해 준 파일이 존재하면 파일의 끝에서부터 데이터를 추가한다. 

데이터 입출력 모드
b : 2진 모드  ( 데이터를 쓰거나 읽어들이는 경우 데이터 변환이 일어나지 않음 ) 
t  : 텍스트 모드 ( 데이터를 쓰거나 읽어들이는 경우 데이터 변환이 일어남 ) 

■ fseek함수
파일 위치 지시자를 원하는 위치에 놓는 함수

int fseek(FILE* stream, long offset, int wherefrom) 

stream이 가리키는 파일의 파일 위치 지시자를 시작 위치 wherefrom에서부터 offset 만큼 이동한다. 
whereform 의 전달인자
SEEK_SET(0) : 파일의 맨 앞으로 이동한다.
SEEK_CUR(1) : 이동하지 않는다.
SEEK_END(2) : 파일의 끝으로 이동한다. 
 
Comments