2학년/C

[C] 입출력

CS_student 2023. 8. 3. 15:33

입출력 

버퍼(buffer)

 표준 입출력 함수를 사용할 때에는 버퍼라는 임시 메모리 공간을 사용하게 된다. 

 1) 데이터를 특정 기준으로 바인딩한 후 한 번에 묶어 전송한다. (전송 시간이 줄어 성능 향상)

 2) 버퍼가 전송되기 전까지 보관하고 있기 때문에 사용자 측에서 내용의 수정이 가능하다.

 3) 입력장치에 독립적으로 사용할 수 있다. scanf함수는 키보드와 직접 연결되지 않고 정해진 크기와 형태를 가진 버퍼에서 입력을 받는다.

     

 버퍼링 방식

    1. 완전 버퍼링 : 버퍼가 포화상태 -> 즉시 전송 

    2. 라인 버퍼링 :   입력도니 문자 중 개형('\n') 문자 만나면 전송

 

 * 입력 버퍼 비우기 : getchar() 함수 / 출력 버퍼 비우기 : fflush() 함수

 

파일 입출력

   파일

     C에서는 파일을 바이트별로 따로 읽을 수 있는 연속적인 바이트의 집합으로 취급한다.

 

   파일의 종류

       1. 바이너리 파일 - 0과1의 이진 형식으로 인코딩된 파일 (읽고 쓸 때 데이터 변환이 발생하지 않는다)

       2. 텍스트 파일 - 사람이 알아볼 수 있는 문자열로 이루어진 파일 (읽고 쓸 때 데이터 변환이 발생한다)

 

  파일 입출력 프로세스 

     포인터를 이용하여 내부에 접근하고, 파일포인터를 선언하여 파일의 위치를 저장할 메모리 주소를 할당받고, 내부로 접근할 수 있다. 

      *파일 입출력의 프로세스 : 1) 파일포인터선언(FILE* fp) 2) fp에 파일 오픈(fopen): 이때, 파일명과 모드를 설정한다.

                                              3) 파일 입출력 : 텍스트파일-fscanf(),fprintf() / 이진파일: fread(), fwrite() 4) 파일 닫기: fclose()

 

    파일에 대한 포인터는 <stdio.h>헤더가 내부적으로 FILE이라는 구조체를 선언해놓았기 때문에 FILE* fp라는 형태로 선언할 수 있다. 

    fopen()함수는 첫 번째 인수로 열고자 하는 파일의 이름/경로를 나타내는 문자열을 받고, 두 번째 인수로는 파일을 여는 데 사용할 모드를 지정하는 문자열이다.     (* 파일모드 : 소스코드가 저장된 폴더에 txt파일을 새롭게 만들어 출력할 것인지, 존재하는 txt파일로부터 입력을 받을 것인지, 읽기만 할 것인지, 쓰기만 할 것인지, 읽고 쓰는 것을 할 것인지에 대한 모드를 지정할 수 있다) 

 

    fscanf()함수는 읽기가 허용된 모드일 때, 파일로부터 형식화된 문자열을 읽는 함수이고, fprintf()함수는 쓰기가 허용된 모드일 때 형식화된 문자열을 쓰는 함수이다. 

     fclose()함수는 파일을 닫아주는 함수로, 파일과의 입출력을 위해 생성한 스트림을 소멸시키는 것을 말한다. 버퍼에 남은 데이터를 파일로 완전히 낸보내고, 입출력을 위해 내부적으로 생성했던 FILE 구조체를 해제한다.